diff --git a/spec/commands_spec.lua b/spec/commands_spec.lua index 2a56026..97faf5c 100644 --- a/spec/commands_spec.lua +++ b/spec/commands_spec.lua @@ -23,6 +23,17 @@ describe("tests related to commands", function() assert.has_error(function() parser:parse{"-q", "install"} end, "unknown option '-q'") end) + it("uses command_target property to save command name", function() + local parser = Parser "name" + :add_help(false) + :command_target("command") + local install = parser:command "install" + install:flag "-q" "--quiet" + + local args = parser:parse{"install", "-q"} + assert.same({install = true, quiet = true, command = "install"}, args) + end) + it("allows to continue passing old options", function() local parser = Parser "name" parser:flag "-v" "--verbose" { diff --git a/src/argparse.lua b/src/argparse.lua index e60ada9..f14fe17 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -244,6 +244,7 @@ local Parser = class({ typechecked("require_command", "boolean"), typechecked("handle_options", "boolean"), typechecked("action", "function"), + typechecked("command_target", "string"), add_help }) @@ -260,6 +261,7 @@ local Command = class({ typechecked("require_command", "boolean"), typechecked("handle_options", "boolean"), typechecked("action", "function"), + typechecked("command_target", "string"), add_help }, Parser) @@ -1013,6 +1015,11 @@ function ParseState:pass(arg) else local command = self:get_command(arg) self.result[command._target or command._name] = true + + if self.parser._command_target then + self.result[self.parser._command_target] = command._name + end + self:switch(command) end end