Return remaining args after error occurred
diff --git a/assert_test.go b/assert_test.go
index 2b31e38..14949be 100644
--- a/assert_test.go
+++ b/assert_test.go
@@ -73,9 +73,10 @@
}
}
-func assertParseFail(t *testing.T, typ ErrorType, msg string, data interface{}, args ...string) {
+func assertParseFail(t *testing.T, typ ErrorType, msg string, data interface{}, args ...string) []string {
parser := NewParser(data, Default&^PrintErrors)
- _, err := parser.ParseArgs(args)
+ ret, err := parser.ParseArgs(args)
assertError(t, err, typ, msg)
+ return ret
}
diff --git a/command_test.go b/command_test.go
index 1e28be4..aa3a10e 100644
--- a/command_test.go
+++ b/command_test.go
@@ -162,7 +162,9 @@
} `command:"add"`
}{}
- assertParseFail(t, ErrUnknownCommand, "Unknown command `addd', did you mean `add'?", &opts, "-v", "addd")
+ args := assertParseFail(t, ErrUnknownCommand, "Unknown command `addd', did you mean `add'?", &opts, "-v", "addd")
+
+ assertStringArray(t, args, []string{"addd"})
}
func TestCommandAdd(t *testing.T) {
diff --git a/parser.go b/parser.go
index 1a9303c..f542393 100644
--- a/parser.go
+++ b/parser.go
@@ -198,14 +198,18 @@
s.checkRequired()
}
+ var reterr error
+
if s.err != nil {
- return s.retargs, p.printError(s.err)
+ reterr = p.printError(s.err)
+ } else if len(s.command.commands) != 0 && !s.command.SubcommandsOptional {
+ reterr = p.printError(s.estimateCommand())
+ } else if cmd, ok := s.command.data.(Commander); ok {
+ reterr = p.printError(cmd.Execute(s.retargs))
}
- if len(s.command.commands) != 0 && !s.command.SubcommandsOptional {
- return s.retargs, p.printError(s.estimateCommand())
- } else if cmd, ok := s.command.data.(Commander); ok {
- return s.retargs, p.printError(cmd.Execute(s.retargs))
+ if reterr != nil {
+ return append([]string{s.arg}, s.args...), reterr
}
return s.retargs, nil