mirror of
https://github.com/TangentFoxy/argparse.git
synced 2025-07-28 11:02:20 +00:00
Implement string aliases for actions
Added built-in "store_false" action.
This commit is contained in:
@@ -96,6 +96,15 @@ describe("actions", function()
|
|||||||
assert.same({path = "./first/second/third"}, args)
|
assert.same({path = "./first/second/third"}, args)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("for options allow using strings as actions", function()
|
||||||
|
local parser = Parser()
|
||||||
|
parser:flag("--no-foo"):target("foo"):action("store_false")
|
||||||
|
parser:flag("--no-bar"):target("bar"):action("store_false")
|
||||||
|
|
||||||
|
local args = parser:parse{"--no-foo"}
|
||||||
|
assert.same({foo = false}, args)
|
||||||
|
end)
|
||||||
|
|
||||||
it("pass overwrite flag as the fourth argument", function()
|
it("pass overwrite flag as the fourth argument", function()
|
||||||
local parser = Parser()
|
local parser = Parser()
|
||||||
local overwrites = {}
|
local overwrites = {}
|
||||||
|
@@ -177,6 +177,16 @@ local function boundaries(name)
|
|||||||
end}
|
end}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local actions = {}
|
||||||
|
|
||||||
|
local option_action = {"action", function(_, value)
|
||||||
|
typecheck("action", {"function", "string"}, value)
|
||||||
|
|
||||||
|
if type(value) == "string" and not actions[value] then
|
||||||
|
error(("unknown action '%s'"):format(value))
|
||||||
|
end
|
||||||
|
end}
|
||||||
|
|
||||||
local add_help = {"add_help", function(self, value)
|
local add_help = {"add_help", function(self, value)
|
||||||
typecheck("add_help", {"boolean", "string", "table"}, value)
|
typecheck("add_help", {"boolean", "string", "table"}, value)
|
||||||
|
|
||||||
@@ -259,7 +269,7 @@ local Argument = class({
|
|||||||
typechecked("defmode", "string"),
|
typechecked("defmode", "string"),
|
||||||
typechecked("show_default", "boolean"),
|
typechecked("show_default", "boolean"),
|
||||||
typechecked("argname", "string", "table"),
|
typechecked("argname", "string", "table"),
|
||||||
typechecked("action", "function")
|
option_action
|
||||||
})
|
})
|
||||||
|
|
||||||
local Option = class({
|
local Option = class({
|
||||||
@@ -279,7 +289,7 @@ local Option = class({
|
|||||||
typechecked("show_default", "boolean"),
|
typechecked("show_default", "boolean"),
|
||||||
typechecked("overwrite", "boolean"),
|
typechecked("overwrite", "boolean"),
|
||||||
typechecked("argname", "string", "table"),
|
typechecked("argname", "string", "table"),
|
||||||
typechecked("action", "function")
|
option_action
|
||||||
}, Argument)
|
}, Argument)
|
||||||
|
|
||||||
function Argument:_get_argument_list()
|
function Argument:_get_argument_list()
|
||||||
@@ -325,12 +335,14 @@ function Argument:_get_usage()
|
|||||||
return usage
|
return usage
|
||||||
end
|
end
|
||||||
|
|
||||||
local actions = {}
|
|
||||||
|
|
||||||
function actions.store_true(result, target)
|
function actions.store_true(result, target)
|
||||||
result[target] = true
|
result[target] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function actions.store_false(result, target)
|
||||||
|
result[target] = false
|
||||||
|
end
|
||||||
|
|
||||||
function actions.store(result, target, argument)
|
function actions.store(result, target, argument)
|
||||||
result[target] = argument
|
result[target] = argument
|
||||||
end
|
end
|
||||||
@@ -350,19 +362,28 @@ function actions.append(result, target, argument, overwrite)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Argument:_get_action()
|
function Argument:_get_action()
|
||||||
|
local action = self._action
|
||||||
|
local init
|
||||||
|
|
||||||
if self._maxcount == 1 then
|
if self._maxcount == 1 then
|
||||||
if self._maxargs == 0 then
|
if self._maxargs == 0 then
|
||||||
return self._action or actions.store_true, nil
|
action, init = action or "store_true", nil
|
||||||
else
|
else
|
||||||
return self._action or actions.store, nil
|
action, init = action or "store", nil
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if self._maxargs == 0 then
|
if self._maxargs == 0 then
|
||||||
return self._action or actions.count, 0
|
action, init = action or "count", 0
|
||||||
else
|
else
|
||||||
return self._action or actions.append, {}
|
action, init = action or "append", {}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if type(action) == "string" then
|
||||||
|
action = actions[action]
|
||||||
|
end
|
||||||
|
|
||||||
|
return action, init
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Returns placeholder for `narg`-th argument.
|
-- Returns placeholder for `narg`-th argument.
|
||||||
|
Reference in New Issue
Block a user