Add UsageOnMissing option to Kong

Adds an UsageOnMissing option which configures Kong to omit errors and
display usage when a command is invalid due to a missing argument. This
can be useful if a user wishes for the top-level command to print usage
when no args are supplied, or if they would prefer child commands which
have their own subcommands to print usage specific to that command.

Signed-off-by: hasheddan <georgedanielmangum@gmail.com>
This commit is contained in:
hasheddan
2020-09-11 15:48:39 -05:00
committed by Alec Thomas
parent 88ecc9c4e9
commit d1821a0666
3 changed files with 22 additions and 7 deletions
+6
View File
@@ -187,6 +187,9 @@ func (c *Context) Validate() error { // nolint: gocyclo
} }
if err := checkMissingChildren(node); err != nil { if err := checkMissingChildren(node); err != nil {
if c.Kong.usageOnMissing {
return c.PrintUsage(false)
}
return err return err
} }
if err := checkMissingPositionals(positionals, node.Positional); err != nil { if err := checkMissingPositionals(positionals, node.Positional); err != nil {
@@ -624,6 +627,9 @@ func (c *Context) Run(binds ...interface{}) (err error) {
defer catch(&err) defer catch(&err)
node := c.Selected() node := c.Selected()
if node == nil { if node == nil {
if c.Kong.usageOnMissing {
return nil
}
return fmt.Errorf("no command selected") return fmt.Errorf("no command selected")
} }
return c.RunNode(node, binds...) return c.RunNode(node, binds...)
+8 -7
View File
@@ -47,13 +47,14 @@ type Kong struct {
resolvers []Resolver resolvers []Resolver
registry *Registry registry *Registry
noDefaultHelp bool noDefaultHelp bool
usageOnError bool usageOnError bool
help HelpPrinter usageOnMissing bool
helpFormatter HelpValueFormatter help HelpPrinter
helpOptions HelpOptions helpFormatter HelpValueFormatter
helpFlag *Flag helpOptions HelpOptions
vars Vars helpFlag *Flag
vars Vars
// Set temporarily by Options. These are applied after build(). // Set temporarily by Options. These are applied after build().
postBuildOptions []Option postBuildOptions []Option
+8
View File
@@ -216,6 +216,14 @@ func UsageOnError() Option {
}) })
} }
// UsageOnMissing configures Kong to display usage and exit successfully if command is missing a child argument.
func UsageOnMissing() Option {
return OptionFunc(func(k *Kong) error {
k.usageOnMissing = true
return nil
})
}
// ClearResolvers clears all existing resolvers. // ClearResolvers clears all existing resolvers.
func ClearResolvers() Option { func ClearResolvers() Option {
return OptionFunc(func(k *Kong) error { return OptionFunc(func(k *Kong) error {