more closely match cobra default val display

This commit is contained in:
Zack Sloane 2023-12-05 22:18:14 -05:00
parent fa7d651ef3
commit 92cb2cc78d
2 changed files with 29 additions and 12 deletions

View file

@ -150,15 +150,7 @@ func manPrintFlags(buf *bytes.Buffer, flags *pflag.FlagSet) {
buf.WriteString(fmt.Sprintf("`--%s`", flag.Name))
}
defval := ""
hiddenDefs := map[string]bool{
"false": true,
"": true,
"[]": true,
}
if !hiddenDefs[flag.DefValue] {
defval = fmt.Sprintf(" (Default: %s)", flag.Value)
}
defval := getDefaultValueDisplayString(flag)
if varname == "" && defval != "" {
buf.WriteString(fmt.Sprintf(" `%s`\n", strings.TrimSpace(defval)))

View file

@ -46,6 +46,30 @@ func hasNonHelpFlags(fs *pflag.FlagSet) (found bool) {
return
}
var hiddenFlagDefaults = map[string]bool{
"false": true,
"": true,
"[]": true,
"duration": true,
}
var defaultValFormats = map[string]string{
"string": " (default \"%s\")",
}
func getDefaultValueDisplayString(f *pflag.Flag) string {
if hiddenFlagDefaults[f.DefValue] || hiddenFlagDefaults[f.Value.Type()] {
return ""
}
if dvf, found := defaultValFormats[f.Value.Type()]; found {
return fmt.Sprintf(dvf, f.Value)
}
return fmt.Sprintf(" (default: %s)", f.Value)
}
type flagView struct {
Name string
Varname string
@ -56,8 +80,8 @@ type flagView struct {
var flagsTemplate = `
<dl class="flags">{{ range . }}
<dt>{{ if .Shorthand }}<code>-{{.Shorthand}}</code>, {{ end -}}
<code>--{{.Name}}{{ if .Varname }} &lt;{{.Varname}}&gt;{{ end }}{{ if not (eq .DefValue "false" "" "[]") }} (Default: {{.DefValue}}){{ end }}</code></dt>
<dt>{{ if .Shorthand }}<code>-{{.Shorthand}}</code>, {{ end }}
<code>--{{.Name}}{{ if .Varname }} &lt;{{.Varname}}&gt;{{ end }}{{.DefValue}} </code></dt>
<dd>{{.Usage}}</dd>
{{ end }}</dl>
`
@ -71,11 +95,12 @@ func printFlagsHTML(w io.Writer, fs *pflag.FlagSet) error {
return
}
varname, usage := pflag.UnquoteUsage(f)
flags = append(flags, flagView{
Name: f.Name,
Varname: varname,
Shorthand: f.Shorthand,
DefValue: f.DefValue,
DefValue: getDefaultValueDisplayString(f),
Usage: usage,
})
})