Better help for maps.

This commit is contained in:
Alec Thomas
2019-01-12 20:59:24 +11:00
parent 59339303b6
commit 886c2d7b01
3 changed files with 26 additions and 16 deletions
+15 -15
View File
@@ -66,13 +66,13 @@ func TestHelp(t *testing.T) {
A test app.
Flags:
--help Show context-sensitive help.
--string=STRING A string flag.
--bool A bool flag with very long help that wraps a lot and is
verbose and is really verbose.
--slice=STR,... A slice of strings.
--map=KEY=VALUE A map of strings to ints.
--required A required flag.
--help Show context-sensitive help.
--string=STRING A string flag.
--bool A bool flag with very long help that wraps a lot and is
verbose and is really verbose.
--slice=STR,... A slice of strings.
--map=KEY=VALUE;... A map of strings to ints.
--required A required flag.
Commands:
one --required
@@ -106,15 +106,15 @@ Sub-sub-arg.
Detailed help provided through the HelpProvider interface.
Flags:
--help Show context-sensitive help.
--string=STRING A string flag.
--bool A bool flag with very long help that wraps a lot and is
verbose and is really verbose.
--slice=STR,... A slice of strings.
--map=KEY=VALUE A map of strings to ints.
--required A required flag.
--help Show context-sensitive help.
--string=STRING A string flag.
--bool A bool flag with very long help that wraps a lot and is
verbose and is really verbose.
--slice=STR,... A slice of strings.
--map=KEY=VALUE;... A map of strings to ints.
--required A required flag.
--flag=STRING Nested flag under two.
--flag=STRING Nested flag under two.
--required-two
--required-three
+1 -1
View File
@@ -357,7 +357,7 @@ func (f *Flag) FormatPlaceHolder() string {
return f.PlaceHolder + tail
}
if f.Value.IsMap() {
return "KEY=VALUE" + tail
return "KEY=VALUE;..."
}
return strings.ToUpper(f.Name) + tail
}
+10
View File
@@ -70,6 +70,16 @@ func jsonDecodeValue(sep rune, value interface{}) (string, error) {
out = append(out, sel)
}
return JoinEscaped(out, sep), nil
case map[string]interface{}:
out := []string{}
for key, el := range v {
sel, err := jsonDecodeValue(sep, el)
if err != nil {
return "", err
}
out = append(out, fmt.Sprintf("%s=%s", key, sel))
}
return JoinEscaped(out, ';'), nil
case bool:
if v {
return "true", nil