diff --git a/spec/options_spec.lua b/spec/options_spec.lua index 5ad897f..40fa4b0 100644 --- a/spec/options_spec.lua +++ b/spec/options_spec.lua @@ -136,6 +136,16 @@ describe("tests related to options", function() assert.same({input = {"bar", "-f", "--foo" , "bar"}}, args) end) + it("allows using -- as an option", function() + local parser = Parser() + parser:flag "--unrelated" + parser:option "--" + :args "*" + :target "tail" + local args = parser:parse{"--", "foo", "--unrelated", "bar"} + assert.same({tail = {"foo", "--unrelated", "bar"}}, args) + end) + describe("Special chars set", function() it("handles windows-style options", function() local parser = Parser() diff --git a/src/argparse.lua b/src/argparse.lua index 06503eb..e3c7614 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -1169,7 +1169,13 @@ function ParseState:parse(args) if arg:sub(2, 2) == first then if #arg == 2 then - self:close() + if self.options[arg] then + local option = self:get_option(arg) + self:invoke(option, arg) + else + self:close() + end + self.handle_options = false else local equals = arg:find "="