docopt.go icon indicating copy to clipboard operation
docopt.go copied to clipboard

Enable option to disable/enable check for non-zero values during Bind

Open morganhein opened this issue 6 years ago • 4 comments

It would be great if it was possible to disable the non-zero check during a bind, so that we can pre-populate certain values and allow for DocOpt to over-ride when necessary.

My use case is i'm using another library to first parse environment variables, and would like program arguments to over-ride when necessary.

Maybe this logic would break other things, so if there's a better suggestion to combine Environment variables with DocOpt i'd love to hear them!

morganhein avatar Mar 23 '18 20:03 morganhein

Have same issue, want to override options parsed from config. Now I have to create two structs and merge them with some additional code.

The simplest solution is probably to fork docopt.go repo and remove that check. It doesn't seems to update too often anyway.

Kagami avatar May 02 '18 15:05 Kagami

I use a "hack" where i populate the default values before parsing, this is of course not so clean, but works great for defaults when these are OS specific

defaultConfFile := pathlib.Join(confDir, "naval.conf")

usageTemplate := `Naval
.....
Options:
  -c <path>  Config path [default: %s].
....`

usage := fmt.Sprintf(usageTemplate, defaultConfFile)

opts, err := docopt.ParseDoc(usage)
...

KalleDK avatar May 18 '20 12:05 KalleDK

Interesting. Sprintf is a bit clunky though, you have to list every option you have in config struct, in correct order. This could be error-prone.

Kagami avatar May 18 '20 13:05 Kagami

Interesting. Sprintf is a bit clunky though, you have to list every option you have in config struct, in correct order. This could be error-prone.

You could use whatever template engine you want :) But as my os specific often only is one or two Sprintf is fine.

KalleDK avatar May 18 '20 16:05 KalleDK