Extend flag categorization to top-level (global) flags

main
Dan Buch 2 years ago
parent 75e4ee69e9
commit e4580f0c50
Signed by: meatballhat
GPG Key ID: A12F782281063434

@ -52,7 +52,7 @@ type App struct {
HideVersion bool
// categories contains the categorized commands and is populated on app startup
categories CommandCategories
// Populate on app startup, only gettable through method Categories()
// flagCategories contains the categorized flags and is populated on app startup
flagCategories FlagCategories
// An action to execute when the shell completion flag is set
BashComplete BashCompleteFunc
@ -217,6 +217,14 @@ func (a *App) Setup() {
}
sort.Sort(a.categories.(*commandCategories))
a.flagCategories = FlagCategories{}
for _, fl := range a.Flags {
if cf, ok := fl.(CategorizableFlag); ok {
a.flagCategories.AddFlag(cf.GetCategory(), cf)
}
}
sort.Sort(a.flagCategories)
if a.Metadata == nil {
a.Metadata = make(map[string]interface{})
}

@ -1789,20 +1789,23 @@ func TestApp_VisibleCategories(t *testing.T) {
HideHelp: true,
Commands: []*Command{
{
Name: "command1",
Category: "1",
HelpName: "foo command1",
Hidden: true,
Name: "command1",
Category: "1",
HelpName: "foo command1",
Hidden: true,
FlagCategories: FlagCategories{},
},
{
Name: "command2",
Category: "2",
HelpName: "foo command2",
Name: "command2",
Category: "2",
HelpName: "foo command2",
FlagCategories: FlagCategories{},
},
{
Name: "command3",
Category: "3",
HelpName: "foo command3",
Name: "command3",
Category: "3",
HelpName: "foo command3",
FlagCategories: FlagCategories{},
},
},
}
@ -1830,21 +1833,24 @@ func TestApp_VisibleCategories(t *testing.T) {
HideHelp: true,
Commands: []*Command{
{
Name: "command1",
Category: "1",
HelpName: "foo command1",
Hidden: true,
Name: "command1",
Category: "1",
HelpName: "foo command1",
Hidden: true,
FlagCategories: FlagCategories{},
},
{
Name: "command2",
Category: "2",
HelpName: "foo command2",
Hidden: true,
Name: "command2",
Category: "2",
HelpName: "foo command2",
Hidden: true,
FlagCategories: FlagCategories{},
},
{
Name: "command3",
Category: "3",
HelpName: "foo command3",
Name: "command3",
Category: "3",
HelpName: "foo command3",
FlagCategories: FlagCategories{},
},
},
}
@ -1866,22 +1872,25 @@ func TestApp_VisibleCategories(t *testing.T) {
HideHelp: true,
Commands: []*Command{
{
Name: "command1",
Category: "1",
HelpName: "foo command1",
Hidden: true,
Name: "command1",
Category: "1",
HelpName: "foo command1",
Hidden: true,
FlagCategories: FlagCategories{},
},
{
Name: "command2",
Category: "2",
HelpName: "foo command2",
Hidden: true,
Name: "command2",
Category: "2",
HelpName: "foo command2",
Hidden: true,
FlagCategories: FlagCategories{},
},
{
Name: "command3",
Category: "3",
HelpName: "foo command3",
Hidden: true,
Name: "command3",
Category: "3",
HelpName: "foo command3",
Hidden: true,
FlagCategories: FlagCategories{},
},
},
}
@ -1890,6 +1899,14 @@ func TestApp_VisibleCategories(t *testing.T) {
expect(t, []CommandCategory{}, app.VisibleCategories())
}
func TestApp_VisibleFlagCategories(t *testing.T) {
app := &App{}
vfc := app.VisibleFlagCategories()
if len(vfc) != 0 {
t.Errorf("unexpected visible flag categories %+v", vfc)
}
}
func TestApp_Run_DoesNotOverwriteErrorFromBefore(t *testing.T) {
app := &App{
Action: func(c *Context) error { return nil },

@ -22,11 +22,16 @@ AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}:
COMMANDS:{{range .VisibleCategories}}{{if .Name}}
{{.Name}}:{{range .VisibleCommands}}
{{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{range .VisibleCommands}}
{{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{end}}{{if .VisibleFlags}}
{{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{end}}{{if .VisibleFlagCategories}}
GLOBAL OPTIONS:{{range .VisibleFlagCategories}}
{{.Name}}
{{range .VisibleFlags}}{{.}}
{{end}}{{end}}{{else}}{{if .VisibleFlags}}
GLOBAL OPTIONS:
{{range $index, $option := .VisibleFlags}}{{if $index}}
{{end}}{{$option}}{{end}}{{end}}{{if .Copyright}}
{{end}}{{$option}}{{end}}{{end}}{{end}}{{if .Copyright}}
COPYRIGHT:
{{.Copyright}}{{end}}
@ -45,11 +50,16 @@ CATEGORY:
{{.Category}}{{end}}{{if .Description}}
DESCRIPTION:
{{.Description | nindent 3 | trim}}{{end}}{{if .VisibleFlags}}
{{.Description | nindent 3 | trim}}{{end}}{{if .VisibleFlagCategories}}
OPTIONS:{{range .VisibleFlagCategories}}
{{.Name}}
{{range .VisibleFlags}}{{.}}
{{end}}{{end}}{{else}}{{if .VisibleFlags}}
OPTIONS:
{{range .VisibleFlags}}{{.}}
{{end}}{{end}}
{{end}}{{end}}{{end}}
`
// SubcommandHelpTemplate is the text template for the subcommand help topic.

Loading…
Cancel
Save