Skip to content

Commit 40e19b3

Browse files
committed
Don't display deprecated flags in bash completions
1 parent 75daccd commit 40e19b3

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

bash_completions.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ func writeFlags(cmd *Command, w io.Writer) error {
421421
localNonPersistentFlags := cmd.LocalNonPersistentFlags()
422422
var visitErr error
423423
cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
424-
if flag.Hidden {
424+
if nonCompletableFlag(flag) {
425425
return
426426
}
427427
if err := writeFlag(flag, w); err != nil {
@@ -445,7 +445,7 @@ func writeFlags(cmd *Command, w io.Writer) error {
445445
return visitErr
446446
}
447447
cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
448-
if flag.Hidden {
448+
if nonCompletableFlag(flag) {
449449
return
450450
}
451451
if err := writeFlag(flag, w); err != nil {
@@ -474,7 +474,7 @@ func writeRequiredFlag(cmd *Command, w io.Writer) error {
474474
flags := cmd.NonInheritedFlags()
475475
var visitErr error
476476
flags.VisitAll(func(flag *pflag.Flag) {
477-
if flag.Hidden {
477+
if nonCompletableFlag(flag) {
478478
return
479479
}
480480
for key := range flag.Annotations {
@@ -583,6 +583,10 @@ func (cmd *Command) GenBashCompletion(w io.Writer) error {
583583
return postscript(w, cmd.Name())
584584
}
585585

586+
func nonCompletableFlag(flag *pflag.Flag) bool {
587+
return flag.Hidden || len(flag.Deprecated) > 0
588+
}
589+
586590
func (cmd *Command) GenBashCompletionFile(filename string) error {
587591
outFile, err := os.Create(filename)
588592
if err != nil {

bash_completions_test.go

+20
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,23 @@ func TestBashCompletionHiddenFlag(t *testing.T) {
158158
t.Error("expected completion to not include %q flag: Got %v", flagName, bashCompletion)
159159
}
160160
}
161+
162+
func TestBashCompletionDeprecatedFlag(t *testing.T) {
163+
var cmdTrue = &Command{
164+
Use: "does nothing",
165+
Run: func(cmd *Command, args []string) {},
166+
}
167+
168+
const flagName = "deprecated-foo-bar-baz"
169+
170+
var flagValue bool
171+
cmdTrue.Flags().BoolVar(&flagValue, flagName, false, "hidden flag")
172+
cmdTrue.Flags().MarkDeprecated(flagName, "use --does-not-exist instead")
173+
174+
out := new(bytes.Buffer)
175+
cmdTrue.GenBashCompletion(out)
176+
bashCompletion := out.String()
177+
if strings.Contains(bashCompletion, flagName) {
178+
t.Errorf("expected completion to not include %q flag: Got %v", flagName, bashCompletion)
179+
}
180+
}

0 commit comments

Comments
 (0)