Introduce FixedCompletions (#1574)
Example usage:
    choices := []string{"choice1", "choice2", "choice3"}
    cmd.RegisterFlagCompletionFunc(cobra.FixedCompletions(choices, ShellCompDirectiveNoFileComp))
			
			
This commit is contained in:
		| @ -103,6 +103,14 @@ func NoFileCompletions(cmd *Command, args []string, toComplete string) ([]string | |||||||
| 	return nil, ShellCompDirectiveNoFileComp | 	return nil, ShellCompDirectiveNoFileComp | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // FixedCompletions can be used to create a completion function which always | ||||||
|  | // returns the same results. | ||||||
|  | func FixedCompletions(choices []string, directive ShellCompDirective) func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) { | ||||||
|  | 	return func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) { | ||||||
|  | 		return choices, directive | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| // RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag. | // RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag. | ||||||
| func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error { | func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error { | ||||||
| 	flag := c.Flag(flagName) | 	flag := c.Flag(flagName) | ||||||
|  | |||||||
| @ -2664,3 +2664,30 @@ func TestCompleteWithRootAndLegacyArgs(t *testing.T) { | |||||||
| 		t.Errorf("expected: %q, got: %q", expected, output) | 		t.Errorf("expected: %q, got: %q", expected, output) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestFixedCompletions(t *testing.T) { | ||||||
|  | 	rootCmd := &Command{Use: "root", Args: NoArgs, Run: emptyRun} | ||||||
|  | 	choices := []string{"apple", "banana", "orange"} | ||||||
|  | 	childCmd := &Command{ | ||||||
|  | 		Use:               "child", | ||||||
|  | 		ValidArgsFunction: FixedCompletions(choices, ShellCompDirectiveNoFileComp), | ||||||
|  | 		Run:               emptyRun, | ||||||
|  | 	} | ||||||
|  | 	rootCmd.AddCommand(childCmd) | ||||||
|  |  | ||||||
|  | 	output, err := executeCommand(rootCmd, ShellCompNoDescRequestCmd, "child", "a") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Errorf("Unexpected error: %v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	expected := strings.Join([]string{ | ||||||
|  | 		"apple", | ||||||
|  | 		"banana", | ||||||
|  | 		"orange", | ||||||
|  | 		":4", | ||||||
|  | 		"Completion ended with directive: ShellCompDirectiveNoFileComp", ""}, "\n") | ||||||
|  |  | ||||||
|  | 	if output != expected { | ||||||
|  | 		t.Errorf("expected: %q, got: %q", expected, output) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user