completions: do not detect arguments with dash as 2nd char as flag (#1817)
Fixes #1816 Previously, arguments with a dash as the second character (e.g., 1-ff00:0:1) were detected as a flag by mistake. This resulted in auto completion misbehaving if such an argument was last in the argument list during invocation.
This commit is contained in:
parent
bf11ab6321
commit
b4f979ae35
@ -692,7 +692,7 @@ Loop:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isFlagArg(arg string) bool {
|
func isFlagArg(arg string) bool {
|
||||||
return ((len(arg) >= 3 && arg[1] == '-') ||
|
return ((len(arg) >= 3 && arg[0:2] == "--") ||
|
||||||
(len(arg) >= 2 && arg[0] == '-' && arg[1] != '-'))
|
(len(arg) >= 2 && arg[0] == '-' && arg[1] != '-'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3115,3 +3115,67 @@ func TestCompletionCobraFlags(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestArgsNotDetectedAsFlagsCompletionInGo(t *testing.T) {
|
||||||
|
// Regression test that ensures the bug described in
|
||||||
|
// https://github.com/spf13/cobra/issues/1816 does not occur anymore.
|
||||||
|
|
||||||
|
root := Command{
|
||||||
|
Use: "root",
|
||||||
|
ValidArgsFunction: func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
|
||||||
|
return []string{"service", "1-123", "11-123"}, ShellCompDirectiveNoFileComp
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
completion := `service
|
||||||
|
1-123
|
||||||
|
11-123
|
||||||
|
:4
|
||||||
|
Completion ended with directive: ShellCompDirectiveNoFileComp
|
||||||
|
`
|
||||||
|
|
||||||
|
testcases := []struct {
|
||||||
|
desc string
|
||||||
|
args []string
|
||||||
|
expectedOutput string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
desc: "empty",
|
||||||
|
args: []string{""},
|
||||||
|
expectedOutput: completion,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "service only",
|
||||||
|
args: []string{"service", ""},
|
||||||
|
expectedOutput: completion,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "service last",
|
||||||
|
args: []string{"1-123", "service", ""},
|
||||||
|
expectedOutput: completion,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "two digit prefixed dash last",
|
||||||
|
args: []string{"service", "11-123", ""},
|
||||||
|
expectedOutput: completion,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "one digit prefixed dash last",
|
||||||
|
args: []string{"service", "1-123", ""},
|
||||||
|
expectedOutput: completion,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range testcases {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
|
args := []string{ShellCompNoDescRequestCmd}
|
||||||
|
args = append(args, tc.args...)
|
||||||
|
output, err := executeCommand(&root, args...)
|
||||||
|
switch {
|
||||||
|
case err == nil && output != tc.expectedOutput:
|
||||||
|
t.Errorf("expected: %q, got: %q", tc.expectedOutput, output)
|
||||||
|
case err != nil:
|
||||||
|
t.Errorf("Unexpected error %q", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user