diff --git a/cobra.go b/cobra.go index 7010fd15b..7b3d4d976 100644 --- a/cobra.go +++ b/cobra.go @@ -189,12 +189,3 @@ func ld(s, t string, ignoreCase bool) int { } return d[len(s)][len(t)] } - -func stringInSlice(a string, list []string) bool { - for _, b := range list { - if b == a { - return true - } - } - return false -} diff --git a/command.go b/command.go index 95c7979d2..4d6135178 100644 --- a/command.go +++ b/command.go @@ -732,7 +732,7 @@ func (c *Command) execute(a []string) (err error) { argWoFlags = a } - if err := c.ValidateArgs(argWoFlags); err != nil { + if err := c.validateArgs(argWoFlags); err != nil { return err } @@ -871,14 +871,16 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { return cmd, err } -func (c *Command) ValidateArgs(args []string) error { +func (c *Command) validateArgs(args []string) error { if c.Args == nil { return nil } if len(c.ValidArgs) > 0 { - for _, v := range args { - if !stringInSlice(v, c.ValidArgs) { - return fmt.Errorf("invalid argument %q for %q%s", v, c.CommandPath(), c.findSuggestions(args[0])) + const p = "$" + s := p + strings.Join(c.ValidArgs, p) + p + for _, a := range args { + if !strings.Contains(s, p+a+p) { + return fmt.Errorf("invalid argument %q for %q%s", a, c.CommandPath(), c.findSuggestions(args[0])) } } } diff --git a/command_test.go b/command_test.go index 6e483a3ec..ce6bcec5b 100644 --- a/command_test.go +++ b/command_test.go @@ -1414,11 +1414,13 @@ func TestSortedFlags(t *testing.T) { if i == len(names) { return } - if stringInSlice(f.Name, names) { - if names[i] != f.Name { - t.Errorf("Incorrect order. Expected %v, got %v", names[i], f.Name) + for _, name := range names { + if name == f.Name { + if names[i] != f.Name { + t.Errorf("Incorrect order. Expected %v, got %v", names[i], f.Name) + } + i++ } - i++ } }) }