Show choices in help and usage messages

This commit is contained in:
Paul Ouellette
2019-05-29 23:18:58 -04:00
parent dcd5162710
commit a8faa0b092
4 changed files with 72 additions and 4 deletions

View File

@@ -86,6 +86,6 @@ The ``choices`` property can be used to restrict an argument to a set of choices
.. code-block:: none
Usage: script.lua [-h] <direction>
Usage: script.lua [-h] {north,south,east,west}
Error: argument 'direction' must be one of 'north', 'south', 'east', 'west'

View File

@@ -86,6 +86,34 @@ Options:
--config <config>]], parser:get_help())
end)
it("creates correct help message for arguments with choices", function()
local parser = Parser "foo"
parser:argument "move"
:choices {"rock", "paper", "scissors"}
assert.equal([[
Usage: foo [-h] {rock,paper,scissors}
Arguments:
{rock,paper,scissors}
Options:
-h, --help Show this help message and exit.]], parser:get_help())
end)
it("creates correct help message for options with argument choices", function()
local parser = Parser "foo"
parser:option "--format"
:choices {"short", "medium", "full"}
assert.equal([[
Usage: foo [-h] [--format {short,medium,full}]
Options:
-h, --help Show this help message and exit.
--format {short,medium,full}]], parser:get_help())
end)
it("adds margin for multiline descriptions", function()
local parser = Parser "foo"
parser:flag "-v"

View File

@@ -89,6 +89,30 @@ Usage: foo <first> <second-and-third> <second-and-third>
)
end)
it("creates correct usage message for arguments with choices", function()
local parser = Parser "foo"
:add_help(false)
parser:argument "move"
:choices {"rock", "paper", "scissors"}
assert.equal(
[=[Usage: foo {rock,paper,scissors}]=],
parser:get_usage()
)
end)
it("creates correct usage message for options with argument choices", function()
local parser = Parser "foo"
:add_help(false)
parser:option "--format"
:choices {"short", "medium", "full"}
assert.equal(
[=[Usage: foo [--format {short,medium,full}]]=],
parser:get_usage()
)
end)
it("creates correct usage message for commands", function()
local parser = Parser "foo"
:add_help(false)

View File

@@ -513,17 +513,33 @@ function Argument:_get_argname(narg)
end
end
function Argument:_get_choices_list()
return "{" .. table.concat(self._choices, ",") .. "}"
end
function Argument:_get_default_argname()
return "<" .. self._name .. ">"
if self._choices then
return self:_get_choices_list()
else
return "<" .. self._name .. ">"
end
end
function Option:_get_default_argname()
return "<" .. self:_get_default_target() .. ">"
if self._choices then
return self:_get_choices_list()
else
return "<" .. self:_get_default_target() .. ">"
end
end
-- Returns labels to be shown in the help message.
function Argument:_get_label_lines()
return {self._name}
if self._choices then
return {self:_get_choices_list()}
else
return {self._name}
end
end
function Option:_get_label_lines()