Software /
code /
prosody
Changeset
13160:4ee9a912ceea
util.argparse: Add support for repeatable parameters
These are gathered into arrays
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 05 Jan 2022 04:46:27 +0100 |
parents | 13159:706f7d1affc2 |
children | 13161:9ba11ef91ce4 |
files | spec/util_argparse_spec.lua util/argparse.lua |
diffstat | 2 files changed, 16 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/spec/util_argparse_spec.lua Sat Jun 17 13:37:33 2023 +0200 +++ b/spec/util_argparse_spec.lua Wed Jan 05 04:46:27 2022 +0100 @@ -50,4 +50,9 @@ assert.equal("-h", where, "returned where"); end); + it("supports array arguments", function () + local opts, err = parse({ "--item"; "foo"; "--item"; "bar" }, { array_params = { item = true } }); + assert.falsy(err); + assert.same({"foo","bar"}, opts.item); + end) end);
--- a/util/argparse.lua Sat Jun 17 13:37:33 2023 +0200 +++ b/util/argparse.lua Wed Jan 05 04:46:27 2022 +0100 @@ -1,6 +1,7 @@ local function parse(arg, config) local short_params = config and config.short_params or {}; local value_params = config and config.value_params or {}; + local array_params = config and config.array_params or {}; local parsed_opts = {}; @@ -30,7 +31,7 @@ end local param_k, param_v; - if value_params[param] then + if value_params[param] or array_params[param] then param_k, param_v = param, table.remove(arg, 1); if not param_v then return nil, "missing-value", raw_param; @@ -46,7 +47,15 @@ end param_k = param_k:gsub("%-", "_"); end - parsed_opts[param_k] = param_v; + if array_params[param] then + if parsed_opts[param_k] then + table.insert(parsed_opts[param_k], param_v); + else + parsed_opts[param_k] = { param_v }; + end + else + parsed_opts[param_k] = param_v; + end end for i = 1, #arg do parsed_opts[i] = arg[i];