Don't display hidden flags in bash completions
This commit is contained in:
		@ -421,6 +421,9 @@ func writeFlags(cmd *Command, w io.Writer) error {
 | 
			
		||||
	localNonPersistentFlags := cmd.LocalNonPersistentFlags()
 | 
			
		||||
	var visitErr error
 | 
			
		||||
	cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
 | 
			
		||||
		if flag.Hidden {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		if err := writeFlag(flag, w); err != nil {
 | 
			
		||||
			visitErr = err
 | 
			
		||||
			return
 | 
			
		||||
@ -442,6 +445,9 @@ func writeFlags(cmd *Command, w io.Writer) error {
 | 
			
		||||
		return visitErr
 | 
			
		||||
	}
 | 
			
		||||
	cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
 | 
			
		||||
		if flag.Hidden {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		if err := writeFlag(flag, w); err != nil {
 | 
			
		||||
			visitErr = err
 | 
			
		||||
			return
 | 
			
		||||
@ -468,6 +474,9 @@ func writeRequiredFlag(cmd *Command, w io.Writer) error {
 | 
			
		||||
	flags := cmd.NonInheritedFlags()
 | 
			
		||||
	var visitErr error
 | 
			
		||||
	flags.VisitAll(func(flag *pflag.Flag) {
 | 
			
		||||
		if flag.Hidden {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		for key := range flag.Annotations {
 | 
			
		||||
			switch key {
 | 
			
		||||
			case BashCompOneRequiredFlag:
 | 
			
		||||
 | 
			
		||||
@ -138,3 +138,23 @@ func TestBashCompletions(t *testing.T) {
 | 
			
		||||
		t.Fatalf("shellcheck failed: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestBashCompletionHiddenFlag(t *testing.T) {
 | 
			
		||||
	var cmdTrue = &Command{
 | 
			
		||||
		Use: "does nothing",
 | 
			
		||||
		Run: func(cmd *Command, args []string) {},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const flagName = "hidden-foo-bar-baz"
 | 
			
		||||
 | 
			
		||||
	var flagValue bool
 | 
			
		||||
	cmdTrue.Flags().BoolVar(&flagValue, flagName, false, "hidden flag")
 | 
			
		||||
	cmdTrue.Flags().MarkHidden(flagName)
 | 
			
		||||
 | 
			
		||||
	out := new(bytes.Buffer)
 | 
			
		||||
	cmdTrue.GenBashCompletion(out)
 | 
			
		||||
	bashCompletion := out.String()
 | 
			
		||||
	if strings.Contains(bashCompletion, flagName) {
 | 
			
		||||
		t.Error("expected completion to not include %q flag: Got %v", flagName, bashCompletion)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user