diff --git a/spec/actions_spec.lua b/spec/actions_spec.lua index a03536e..64d1dc9 100644 --- a/spec/actions_spec.lua +++ b/spec/actions_spec.lua @@ -115,6 +115,21 @@ describe("actions", function() assert.same({foo = false, bar = true}, args) end) + it("'append' and 'concat' respect initial value", function() + local parser = Parser() + parser:option("-f"):count("*"):init(nil) + parser:option("-g"):args("*"):count("*"):action("concat"):init(nil) + + local args = parser:parse{} + assert.same({}, args) + + args = parser:parse{"-fabc", "-fdef", "-g"} + assert.same({f = {"abc", "def"}, g = {}}, args) + + args = parser:parse{"-g", "abc", "def", "-g123", "-f123"} + assert.same({f = {"123"}, g = {"abc", "def", "123"}}, args) + end) + it("for options allow setting initial stored value as non-string argument to default", function() local parser = Parser() parser:flag("--no-foo", "Foo the bar.", true):target("foo"):action("store_false") diff --git a/src/argparse.lua b/src/argparse.lua index b849ec0..e60ada9 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -368,6 +368,7 @@ function actions.count(result, target, _, overwrite) end function actions.append(result, target, argument, overwrite) + result[target] = result[target] or {} table.insert(result[target], argument) if overwrite then @@ -380,6 +381,8 @@ function actions.concat(result, target, arguments, overwrite) error("'concat' action can't handle too many invocations") end + result[target] = result[target] or {} + for _, argument in ipairs(arguments) do table.insert(result[target], argument) end