Skip to content

Commit

Permalink
Complete subcommands when TraverseChildren is true in bash completion
Browse files Browse the repository at this point in the history
The current bash completion logic does not complete
subcommands when a local flag is set. There is also a bug
where subcommands are sometimes still getting completed. see: #1172

If TraverseChildren is true we should allow subcommands
to be completed even if a local flag is set.

Closes #1172

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
  • Loading branch information
Luap99 committed Jul 19, 2020
1 parent baba58a commit b856c0c
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions bash_completions.go
Expand Up @@ -495,9 +495,9 @@ func writeFlag(buf *bytes.Buffer, flag *pflag.Flag, cmd *Command) {

func writeLocalNonPersistentFlag(buf *bytes.Buffer, flag *pflag.Flag) {
name := flag.Name
format := " local_nonpersistent_flags+=(\"--%s"
format := " local_nonpersistent_flags+=(\"--%[1]s"
if len(flag.NoOptDefVal) == 0 {
format += "="
format += "\")\n local_nonpersistent_flags+=(\"--%[1]s="
}
format += "\")\n"
buf.WriteString(fmt.Sprintf(format, name))
Expand Down Expand Up @@ -535,7 +535,9 @@ func writeFlags(buf *bytes.Buffer, cmd *Command) {
if len(flag.Shorthand) > 0 {
writeShortFlag(buf, flag, cmd)
}
if localNonPersistentFlags.Lookup(flag.Name) != nil {
// localNonPersistentFlags are used to stop the completion of subcommands when one is set
// if TraverseChildren is true we should allow to complete subcommands
if localNonPersistentFlags.Lookup(flag.Name) != nil && !cmd.Root().TraverseChildren {
writeLocalNonPersistentFlag(buf, flag)
}
})
Expand Down

0 comments on commit b856c0c

Please sign in to comment.