feat(completion): add option to create default command alone

This commit is contained in:
Ville Skyttä 2021-05-06 16:49:39 +03:00
parent 19c9c74384
commit a27fd0d95b
2 changed files with 7 additions and 4 deletions

View file

@ -927,10 +927,10 @@ func (c *Command) ExecuteC() (cmd *Command, err error) {
preExecHookFn(c) preExecHookFn(c)
} }
// initialize help at the last point to allow for user overriding
c.InitDefaultHelpCmd()
// initialize completion at the last point to allow for user overriding // initialize completion at the last point to allow for user overriding
c.initDefaultCompletionCmd() c.initDefaultCompletionCmd()
// initialize help at the last point to allow for user overriding
c.InitDefaultHelpCmd()
args := c.args args := c.args

View file

@ -95,6 +95,9 @@ type CompletionOptions struct {
DisableDescriptions bool DisableDescriptions bool
// HiddenDefaultCmd makes the default 'completion' command hidden // HiddenDefaultCmd makes the default 'completion' command hidden
HiddenDefaultCmd bool HiddenDefaultCmd bool
// InitDefaultEvenIfHasNoSubCommands causes the default 'completion' command to be created
// even if there are no other commands defined
InitDefaultEvenIfHasNoSubCommands bool
} }
// NoFileCompletions can be used to disable file completion for commands that should // NoFileCompletions can be used to disable file completion for commands that should
@ -583,10 +586,10 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p
// initDefaultCompletionCmd adds a default 'completion' command to c. // initDefaultCompletionCmd adds a default 'completion' command to c.
// This function will do nothing if any of the following is true: // This function will do nothing if any of the following is true:
// 1- the feature has been explicitly disabled by the program, // 1- the feature has been explicitly disabled by the program,
// 2- c has no subcommands (to avoid creating one), // 2- c has no subcommands (to avoid creating one) and not overridden with the InitDefaultEvenIfHasNoSubCommands completion option,
// 3- c already has a 'completion' command provided by the program. // 3- c already has a 'completion' command provided by the program.
func (c *Command) initDefaultCompletionCmd() { func (c *Command) initDefaultCompletionCmd() {
if c.CompletionOptions.DisableDefaultCmd || !c.HasSubCommands() { if c.CompletionOptions.DisableDefaultCmd || (!c.CompletionOptions.InitDefaultEvenIfHasNoSubCommands && !c.HasSubCommands()) {
return return
} }