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 c.Kong.usageOnMissing {
return c.PrintUsage(false)
}
return err
}
if err := checkMissingPositionals(positionals, node.Positional); err != nil {
@@ -624,6 +627,9 @@ func (c *Context) Run(binds ...interface{}) (err error) {
defer catch(&err)
node := c.Selected()
if node == nil {
if c.Kong.usageOnMissing {
return nil
}
return fmt.Errorf("no command selected")
}
return c.RunNode(node, binds...)
+8 -7
View File
@@ -47,13 +47,14 @@ type Kong struct {
resolvers []Resolver
registry *Registry
noDefaultHelp bool
usageOnError bool
help HelpPrinter
helpFormatter HelpValueFormatter
helpOptions HelpOptions
helpFlag *Flag
vars Vars
noDefaultHelp bool
usageOnError bool
usageOnMissing bool
help HelpPrinter
helpFormatter HelpValueFormatter
helpOptions HelpOptions
helpFlag *Flag
vars Vars
// Set temporarily by Options. These are applied after build().
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.
func ClearResolvers() Option {
return OptionFunc(func(k *Kong) error {