Skip to content

Commit 68e6b5c

Browse files
authored
fix: update usage template to only show flags when present (#273)
* update usage template to only show flags when present * pr feedback
1 parent 76de2a5 commit 68e6b5c

4 files changed

Lines changed: 41 additions & 48 deletions

File tree

cmd/flags/toggle.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func NewToggleOnCmd(client resources.Client) *cobra.Command {
2323
Use: "toggle-on",
2424
}
2525

26-
cmd.SetUsageTemplate(resourcescmd.OperationUsageTemplate())
26+
cmd.SetUsageTemplate(resourcescmd.SubcommandUsageTemplate())
2727
initFlags(cmd)
2828

2929
return cmd

cmd/resources/resources.go

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func NewResourceCmd(
210210
},
211211
}
212212

213-
cmd.SetUsageTemplate(getResourceUsageTemplate())
213+
cmd.SetUsageTemplate(SubcommandUsageTemplate())
214214
parentCmd.AddCommand(cmd)
215215
parentCmd.Annotations[resourceName] = "resource"
216216

@@ -356,7 +356,7 @@ func NewOperationCmd(parentCmd *cobra.Command, client resources.Client, op Opera
356356
Use: op.Use,
357357
}
358358

359-
cmd.SetUsageTemplate(OperationUsageTemplate())
359+
cmd.SetUsageTemplate(SubcommandUsageTemplate())
360360

361361
opCmd.cmd = cmd
362362
_ = opCmd.initFlags()
@@ -366,7 +366,7 @@ func NewOperationCmd(parentCmd *cobra.Command, client resources.Client, op Opera
366366
return cmd
367367
}
368368

369-
func getResourceUsageTemplate() string {
369+
func SubcommandUsageTemplate() string {
370370
return `Usage:{{if .Runnable}}
371371
{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
372372
{{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
@@ -384,49 +384,16 @@ Available Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help")
384384
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}
385385
386386
Additional Commands:{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}}
387-
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
388-
389-
Flags:
390-
{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
391-
392-
Global Flags:
393-
{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}
394-
395-
Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
396-
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}
397-
398-
Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
399-
`
400-
}
401-
402-
func OperationUsageTemplate() string {
403-
return `Usage:{{if .Runnable}}
404-
{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
405-
{{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
406-
407-
Aliases:
408-
{{.NameAndAliases}}{{end}}{{if .HasExample}}
409-
410-
Examples:
411-
{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}}
412-
413-
Available Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
414-
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}}
415-
416-
{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}}
417-
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}
418-
419-
Additional Commands:{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}}
420-
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
387+
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}{{if gt (len WrappedRequiredFlagUsages .) 0}}
421388
422389
Required flags:
423-
{{WrappedRequiredFlagUsages . | trimTrailingWhitespaces}}
390+
{{WrappedRequiredFlagUsages . | trimTrailingWhitespaces}}{{end}}{{if HasOptionalFlags .}}
424391
425392
Optional flags:
426-
{{WrappedOptionalFlagUsages . | trimTrailingWhitespaces}}
393+
{{WrappedOptionalFlagUsages . | trimTrailingWhitespaces}}{{end}}
427394
428-
Global Flags:
429-
{{rpad " -h, --help" 29}} Help for this command
395+
Global flags:
396+
{{rpad " -h, --help" 29}} Get help about any command
430397
{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}
431398
432399
Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}

cmd/root.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ See each command's help for details on how to use the generated script.`, rootCm
232232

233233
cobra.AddTemplateFunc("WrappedRequiredFlagUsages", WrappedRequiredFlagUsages)
234234
cobra.AddTemplateFunc("WrappedOptionalFlagUsages", WrappedOptionalFlagUsages)
235+
cobra.AddTemplateFunc("HasRequiredFlags", HasRequiredFlags)
236+
cobra.AddTemplateFunc("HasOptionalFlags", HasOptionalFlags)
235237
rootCmd.cmd.SetUsageTemplate(getUsageTemplate())
236238

237239
err = rootCmd.Execute()

cmd/templates.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,53 @@ Flags:
2828
`
2929
}
3030

31+
func HasRequiredFlags(cmd *cobra.Command) bool {
32+
var numFlags int
33+
cmd.LocalFlags().VisitAll(func(flag *pflag.Flag) {
34+
_, ok := flag.Annotations["required"]
35+
if ok {
36+
numFlags += 1
37+
}
38+
})
39+
40+
return numFlags > 0
41+
}
42+
43+
func HasOptionalFlags(cmd *cobra.Command) bool {
44+
var numFlags int
45+
cmd.LocalFlags().VisitAll(func(flag *pflag.Flag) {
46+
_, ok := flag.Annotations["required"]
47+
if !ok && flag.Name != "help" {
48+
numFlags += 1
49+
}
50+
})
51+
52+
return numFlags > 0
53+
}
54+
3155
func WrappedRequiredFlagUsages(cmd *cobra.Command) string {
32-
nonRequestParamsFlags := pflag.NewFlagSet("request", pflag.ExitOnError)
56+
flagSet := pflag.NewFlagSet("request", pflag.ExitOnError)
3357

3458
cmd.LocalFlags().VisitAll(func(flag *pflag.Flag) {
3559
if _, ok := flag.Annotations["required"]; ok {
36-
nonRequestParamsFlags.AddFlag(flag)
60+
flagSet.AddFlag(flag)
3761
}
3862
})
3963

40-
return nonRequestParamsFlags.FlagUsagesWrapped(getTerminalWidth())
64+
return flagSet.FlagUsagesWrapped(getTerminalWidth())
4165
}
4266

4367
func WrappedOptionalFlagUsages(cmd *cobra.Command) string {
44-
nonRequestParamsFlags := pflag.NewFlagSet("request", pflag.ExitOnError)
68+
flagSet := pflag.NewFlagSet("request", pflag.ExitOnError)
4569

4670
cmd.LocalFlags().VisitAll(func(flag *pflag.Flag) {
4771
_, ok := flag.Annotations["required"]
4872
if !ok && flag.Name != "help" {
49-
nonRequestParamsFlags.AddFlag(flag)
73+
flagSet.AddFlag(flag)
5074
}
5175
})
5276

53-
return nonRequestParamsFlags.FlagUsagesWrapped(getTerminalWidth())
77+
return flagSet.FlagUsagesWrapped(getTerminalWidth())
5478
}
5579

5680
func getTerminalWidth() int {

0 commit comments

Comments
 (0)