diff --git a/spec/help_spec.lua b/spec/help_spec.lua index 487ce28..ee2dd2d 100644 --- a/spec/help_spec.lua +++ b/spec/help_spec.lua @@ -146,7 +146,7 @@ Options: it("creates correct help message for commands", function() local parser = Parser "foo" - parser:flag "-q" "--quiet" + parser:flag "-q --quiet" local run = parser:command "run" :description "Run! " run:option "--where" diff --git a/spec/pparse_spec.lua b/spec/pparse_spec.lua index f4ad812..a37d308 100644 --- a/spec/pparse_spec.lua +++ b/spec/pparse_spec.lua @@ -4,7 +4,7 @@ getmetatable(Parser()).error = function(_, msg) error(msg) end describe("tests related to :pparse()", function() it("returns true and result on success", function() local parser = Parser() - parser:option "-s" "--server" + parser:option "-s --server" local ok, args = parser:pparse{"--server", "foo"} assert.is_true(ok) assert.same({server = "foo"}, args) @@ -20,8 +20,8 @@ describe("tests related to :pparse()", function() it("still raises an error if it is caused by misconfiguration", function() local parser = Parser() - parser:option "--foo" - :aliases {1, 2, 3} - assert.has_error(function() parser:pparse{} end) + parser:flag "--foo" + :action(error) + assert.has_error(function() parser:pparse{"--foo"} end) end) end) diff --git a/src/argparse.lua b/src/argparse.lua index 8e9b9e4..7eb2ff4 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -98,19 +98,16 @@ local function typechecked(name, ...) return {name, function(_, value) typecheck(name, types, value) end} end -local aliased_name = {"name", function(self, value) +local multiname = {"name", function(self, value) typecheck("name", {"string"}, value) - table.insert(self._aliases, value) - -- Do not set _name to value if there is a name already. - return self._name -end} -local aliased_aliases = {"aliases", function(self, value) - typecheck("aliases", {"table"}, value) - - if not self._name then - self._name = value[1] + for alias in value:gmatch("%S+") do + self._name = self._name or alias + table.insert(self._aliases, alias) end + + -- Do not set _name as with other properties. + return true end} local function parse_boundaries(str) @@ -200,8 +197,7 @@ local Parser = new_class({ local Command = new_class({ _aliases = {} }, { - aliased_name, - aliased_aliases, + multiname, typechecked("description", "string"), typechecked("epilog", "string"), typechecked("target", "string"), @@ -236,8 +232,7 @@ local Option = new_class({ _mincount = 0, _overwrite = true }, { - aliased_name, - aliased_aliases, + multiname, typechecked("description", "string"), typechecked("target", "string"), boundaries("args"),