unknown option handler must be able to accept flags in --flag=value format
diff --git a/parser.go b/parser.go
index a417ba9..f95a92d 100644
--- a/parser.go
+++ b/parser.go
@@ -29,7 +29,7 @@
// name and the remaining command line arguments.
// It should return a new list of remaining arguments to continue parsing,
// or an error to indicate a parse failure.
- UnknownOptionHandler func(option string, args []string) ([]string, error)
+ UnknownOptionHandler func(option string, val *string, args []string) ([]string, error)
internalError error
}
@@ -219,7 +219,7 @@
if ignoreUnknown {
s.addArgs(arg)
} else if p.UnknownOptionHandler != nil {
- modifiedArgs, err := p.UnknownOptionHandler(optname, s.args)
+ modifiedArgs, err := p.UnknownOptionHandler(optname, argument, s.args)
if err != nil {
s.err = err
diff --git a/parser_test.go b/parser_test.go
index bba7576..325bc35 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -369,10 +369,15 @@
var unknownFlag1 string
var unknownFlag2 bool
+ var unknownFlag3 string
// Set up a callback to intercept unknown options during parsing
- p.UnknownOptionHandler = func(option string, args []string) ([]string, error) {
+ p.UnknownOptionHandler = func(option string, argument *string, args []string) ([]string, error) {
if option == "unknownFlag1" {
+ if argument != nil {
+ unknownFlag1 = *argument
+ return args, nil
+ }
// consume a value from remaining args list
unknownFlag1 = args[0]
return args[1:], nil
@@ -380,6 +385,14 @@
// treat this one as a bool switch, don't consume any args
unknownFlag2 = true
return args, nil
+ } else if option == "unknownFlag3" {
+ if argument != nil {
+ unknownFlag3 = *argument
+ return args, nil
+ }
+ // consume a value from remaining args list
+ unknownFlag3 = args[0]
+ return args[1:], nil
}
return args, fmt.Errorf("Unknown flag: %v", option)
@@ -387,7 +400,7 @@
// Parse args containing some unknown flags, verify that
// our callback can handle all of them
- _, err := p.ParseArgs([]string{"--flag1=stuff", "--unknownFlag1", "blah", "--unknownFlag2", "--flag2=foo"})
+ _, err := p.ParseArgs([]string{"--flag1=stuff", "--unknownFlag1", "blah", "--unknownFlag2", "--unknownFlag3=baz", "--flag2=foo"})
if err != nil {
assertErrorf(t, "Parser returned unexpected error %v", err)
@@ -396,6 +409,7 @@
assertString(t, opts.Flag1, "stuff")
assertString(t, opts.Flag2, "foo")
assertString(t, unknownFlag1, "blah")
+ assertString(t, unknownFlag3, "baz")
if !unknownFlag2 {
assertErrorf(t, "Flag should have been set by unknown handler, but had value: %v", unknownFlag2)