Skip to content

Commit

Permalink
Basic working flag category support
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeljs1990 committed Jan 27, 2019
1 parent 51aebb5 commit 9720ac0
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
17 changes: 10 additions & 7 deletions app.go
Expand Up @@ -145,6 +145,14 @@ func (a *App) Setup() {
if c.HelpName == "" {
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)
}
a.Commands = newCmds
Expand All @@ -166,7 +174,7 @@ func (a *App) Setup() {
}
sort.Sort(a.categories)

if a.Metadata == nil {
if a.Metadata == nil {
a.Metadata = make(map[string]interface{})
}

Expand Down Expand Up @@ -194,11 +202,6 @@ func (a *App) Run(arguments []string) (err error) {
return err
}

a.flagCategories = FlagCategories{}
for _, flag := range a.Flags {
a.flagCategories = a.flagCategories.AddFlag(flag.GetCategory(), flag)
}

set.SetOutput(ioutil.Discard)
err = set.Parse(arguments[1:])
nerr := normalizeFlags(a.Flags, set)
Expand Down Expand Up @@ -445,7 +448,7 @@ func (a *App) VisibleCommands() []Command {
}

// 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
}

Expand Down
7 changes: 7 additions & 0 deletions command.go
Expand Up @@ -45,6 +45,8 @@ type Command struct {
Subcommands Commands
// List of flags to parse
Flags []Flag
// List of all flag categories
FlagCategories FlagCategories
// Treat all flags as normal arguments if true
SkipFlagParsing bool
// Skip argument reordering which attempts to move flags before arguments,
Expand Down Expand Up @@ -377,6 +379,11 @@ func (c Command) startApp(ctx *Context) error {
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
func (c Command) VisibleFlags() []Flag {
return visibleFlags(c.Flags)
Expand Down
10 changes: 7 additions & 3 deletions help.go
Expand Up @@ -54,9 +54,10 @@ CATEGORY:
{{.Category}}{{end}}{{if .Description}}
DESCRIPTION:
{{.Description}}{{end}}{{if .VisibleFlags}}
{{.Description}}{{end}}
OPTIONS:
OPTIONS:{{range .VisibleFlagCategories}}
{{.Name}}
{{range .VisibleFlags}}{{.}}
{{end}}{{end}}
`
Expand Down Expand Up @@ -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
// we can do to recover.
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
}
Expand Down

0 comments on commit 9720ac0

Please sign in to comment.