docopt / docopt.go

A command-line arguments parser that will make you smile.
http://docopt.org/
MIT License
1.43k stars 111 forks source link

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

Open morganhein opened 6 years ago

morganhein commented 6 years ago

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!

Kagami commented 6 years ago

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.

KalleDK commented 4 years ago

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)
...
Kagami commented 4 years ago

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.

KalleDK commented 4 years ago

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.