aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2025-02-17 18:24:23 +0000
committerMatthew Wild <mwild1@gmail.com>2025-02-17 18:24:23 +0000
commit43be6cb1c639fb571c22abb80d8ab910d5b1657a (patch)
tree4e422ab8b1efdb7dcb29572b458c82800487cf85 /util
parent79381510cfc470cbe8af57b05c4dfd27b12f55d2 (diff)
downloadprosody-43be6cb1c639fb571c22abb80d8ab910d5b1657a.tar.gz
prosody-43be6cb1c639fb571c22abb80d8ab910d5b1657a.zip
util.argparse: Add strict mode + tests
Diffstat (limited to 'util')
-rw-r--r--util/argparse.lua13
1 files changed, 10 insertions, 3 deletions
diff --git a/util/argparse.lua b/util/argparse.lua
index 22618019..3a7d1ba2 100644
--- a/util/argparse.lua
+++ b/util/argparse.lua
@@ -2,6 +2,8 @@ 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 kv_params = config and config.kv_params or {};
+ local strict = config and config.strict;
local stop_on_positional = not config or config.stop_on_positional ~= false;
local parsed_opts = {};
@@ -33,9 +35,11 @@ local function parse(arg, config)
return nil, "param-not-found", raw_param;
end
+ local uparam = param:match("^[^=]*"):gsub("%-", "_");
+
local param_k, param_v;
- if value_params[param] or array_params[param] then
- param_k, param_v = param, table.remove(arg, 1);
+ if value_params[uparam] or array_params[uparam] then
+ param_k, param_v = uparam, table.remove(arg, 1);
if not param_v then
return nil, "missing-value", raw_param;
end
@@ -49,8 +53,11 @@ local function parse(arg, config)
end
end
param_k = param_k:gsub("%-", "_");
+ if strict and not kv_params[param_k] then
+ return nil, "param-not-found", raw_param;
+ end
end
- if array_params[param] then
+ if array_params[uparam] then
if parsed_opts[param_k] then
table.insert(parsed_opts[param_k], param_v);
else