Mercurial > prosody-hg
comparison util/argparse.lua @ 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 | 766152afc1c9 |
| children | d78e0f422464 |
comparison
equal
deleted
inserted
replaced
| 13159:706f7d1affc2 | 13160:4ee9a912ceea |
|---|---|
| 1 local function parse(arg, config) | 1 local function parse(arg, config) |
| 2 local short_params = config and config.short_params or {}; | 2 local short_params = config and config.short_params or {}; |
| 3 local value_params = config and config.value_params or {}; | 3 local value_params = config and config.value_params or {}; |
| 4 local array_params = config and config.array_params or {}; | |
| 4 | 5 |
| 5 local parsed_opts = {}; | 6 local parsed_opts = {}; |
| 6 | 7 |
| 7 if #arg == 0 then | 8 if #arg == 0 then |
| 8 return parsed_opts; | 9 return parsed_opts; |
| 28 if not param then | 29 if not param then |
| 29 return nil, "param-not-found", raw_param; | 30 return nil, "param-not-found", raw_param; |
| 30 end | 31 end |
| 31 | 32 |
| 32 local param_k, param_v; | 33 local param_k, param_v; |
| 33 if value_params[param] then | 34 if value_params[param] or array_params[param] then |
| 34 param_k, param_v = param, table.remove(arg, 1); | 35 param_k, param_v = param, table.remove(arg, 1); |
| 35 if not param_v then | 36 if not param_v then |
| 36 return nil, "missing-value", raw_param; | 37 return nil, "missing-value", raw_param; |
| 37 end | 38 end |
| 38 else | 39 else |
| 44 param_k, param_v = param, true; | 45 param_k, param_v = param, true; |
| 45 end | 46 end |
| 46 end | 47 end |
| 47 param_k = param_k:gsub("%-", "_"); | 48 param_k = param_k:gsub("%-", "_"); |
| 48 end | 49 end |
| 49 parsed_opts[param_k] = param_v; | 50 if array_params[param] then |
| 51 if parsed_opts[param_k] then | |
| 52 table.insert(parsed_opts[param_k], param_v); | |
| 53 else | |
| 54 parsed_opts[param_k] = { param_v }; | |
| 55 end | |
| 56 else | |
| 57 parsed_opts[param_k] = param_v; | |
| 58 end | |
| 50 end | 59 end |
| 51 for i = 1, #arg do | 60 for i = 1, #arg do |
| 52 parsed_opts[i] = arg[i]; | 61 parsed_opts[i] = arg[i]; |
| 53 end | 62 end |
| 54 return parsed_opts; | 63 return parsed_opts; |
