Basic working flag category support
This commit is contained in:
parent
51aebb5a03
commit
9720ac029c
17
app.go
17
app.go
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
10
help.go
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user