Basic working flag category support

This commit is contained in:
Michael Schuett 2019-01-27 15:48:00 -05:00
parent 51aebb5a03
commit 9720ac029c
3 changed files with 24 additions and 10 deletions

17
app.go
View File

@ -145,6 +145,14 @@ func (a *App) Setup() {
if c.HelpName == "" { if c.HelpName == "" {
c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name) c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name)
} }
fc := FlagCategories{}
for _, flag := range c.Flags {
fc = fc.AddFlag(flag.GetCategory(), flag)
}
sort.Sort(fc)
c.FlagCategories = fc
newCmds = append(newCmds, c) newCmds = append(newCmds, c)
} }
a.Commands = newCmds a.Commands = newCmds
@ -166,7 +174,7 @@ func (a *App) Setup() {
} }
sort.Sort(a.categories) sort.Sort(a.categories)
if a.Metadata == nil { if a.Metadata == nil {
a.Metadata = make(map[string]interface{}) a.Metadata = make(map[string]interface{})
} }
@ -194,11 +202,6 @@ func (a *App) Run(arguments []string) (err error) {
return err return err
} }
a.flagCategories = FlagCategories{}
for _, flag := range a.Flags {
a.flagCategories = a.flagCategories.AddFlag(flag.GetCategory(), flag)
}
set.SetOutput(ioutil.Discard) set.SetOutput(ioutil.Discard)
err = set.Parse(arguments[1:]) err = set.Parse(arguments[1:])
nerr := normalizeFlags(a.Flags, set) nerr := normalizeFlags(a.Flags, set)
@ -445,7 +448,7 @@ func (a *App) VisibleCommands() []Command {
} }
// Categories returns a slice containing all the categories with the commands they contain // Categories returns a slice containing all the categories with the commands they contain
func (a *App) FlagCategories() FlagCategories { func (a *App) VisibleFlagCategories() FlagCategories {
return a.flagCategories return a.flagCategories
} }

View File

@ -45,6 +45,8 @@ type Command struct {
Subcommands Commands Subcommands Commands
// List of flags to parse // List of flags to parse
Flags []Flag Flags []Flag
// List of all flag categories
FlagCategories FlagCategories
// Treat all flags as normal arguments if true // Treat all flags as normal arguments if true
SkipFlagParsing bool SkipFlagParsing bool
// Skip argument reordering which attempts to move flags before arguments, // Skip argument reordering which attempts to move flags before arguments,
@ -377,6 +379,11 @@ func (c Command) startApp(ctx *Context) error {
return app.RunAsSubcommand(ctx) return app.RunAsSubcommand(ctx)
} }
// Categories returns a slice containing all the categories with the commands they contain
func (c Command) VisibleFlagCategories() FlagCategories {
return c.FlagCategories
}
// VisibleFlags returns a slice of the Flags with Hidden=false // VisibleFlags returns a slice of the Flags with Hidden=false
func (c Command) VisibleFlags() []Flag { func (c Command) VisibleFlags() []Flag {
return visibleFlags(c.Flags) return visibleFlags(c.Flags)

10
help.go
View File

@ -54,9 +54,10 @@ CATEGORY:
{{.Category}}{{end}}{{if .Description}} {{.Category}}{{end}}{{if .Description}}
DESCRIPTION: DESCRIPTION:
{{.Description}}{{end}}{{if .VisibleFlags}} {{.Description}}{{end}}
OPTIONS: OPTIONS:{{range .VisibleFlagCategories}}
{{.Name}}
{{range .VisibleFlags}}{{.}} {{range .VisibleFlags}}{{.}}
{{end}}{{end}} {{end}}{{end}}
` `
@ -250,7 +251,10 @@ func printHelpCustom(out io.Writer, templ string, data interface{}, customFunc m
// If the writer is closed, t.Execute will fail, and there's nothing // If the writer is closed, t.Execute will fail, and there's nothing
// we can do to recover. // we can do to recover.
if os.Getenv("CLI_TEMPLATE_ERROR_DEBUG") != "" { if os.Getenv("CLI_TEMPLATE_ERROR_DEBUG") != "" {
fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR: %#v\n", err) // Generic error message
fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR DEBUG: %#v\n", err)
// Helpful error message
fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR DEBUG: %#v\n", err.Error())
} }
return return
} }