argparse ~api-with-named-parameters
Parser for command line arguments
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
Parser for command line arguments
argparse is a flexible utility for D programming language to parse command line arguments.
[!WARNING] :warning: Please be aware that current HEAD contains breaking changes comparing to 1.*
:warning: This includes changes in documentation - documentation for 1.* version is here
Changes since 1.* version
<details> <summary>Changelog</summary>
Breaking changes
Changes in
Config:Custom error handler function (
Config.errorHandler) now receives message text with ANSI styling if styling is enabled. One can useargparse.ansi.getUnstyledTextfunction to remove any styling - this function returns a range of unstyledstringobjects which can be used as is orjoin'ed into a string if needed:message.getUnstyledText.join.Config.addHelpis renamed toConfig.addHelpArgument.Config.arraySepis renamed toConfig.valueSep.Config.caseSensitiveis replaced withConfig.caseSensitiveShortName,Config.caseSensitiveLongNameandConfig.caseSensitiveSubCommand. There is also a "new"Config.caseSensitivefunction/property helper that sets all above settings to a specific value.Config.endOfArgsis renamed toConfig.endOfNamedArgs.Config.helpStyleis renamed toConfig.styling.Config.namedArgCharis replaced withConfig.shortNamePrefixandConfig.longNamePrefix.Style.namedArgumentNameis renamed toStyle.argumentName.Underlying type of
ansiStylingArgumentargument is changed. It can now be directly cast to boolean instead comparing againstConfig.StylingMode.
So if you use it:
static auto color = ansiStylingArgument;
then you should replace
if(args.color == Config.StylingMode.on)
with
if(args.color)
@SubCommandsUDA is removed. One should useSubCommandtemplate instead ofSumType
Simply replace
@SubCommands SumType!(CMD1, CMD2, Default!CMD3) cmd;
with
SubCommand!(CMD1, CMD2, Default!CMD3) cmd;
@TrailingArgumentsUDA is removed: all command line parameters that appear after double-dash--are considered as positional arguments. So if those parameters are to be parsed, use@PositionalArgumentinstead of@TrailingArguments.Functions for parsing customization (
PreValidation,Parse,ValidationandAction) now accept functions as runtime parameters instead of template arguments
For example, replace this
.Parse !((string s) { return cast(char) s[1]; })
.Validation!((char v) { return v >= '0' && v <= '9'; })
with
.Parse ((string s) { return cast(char) s[1]; })
.Validation((char v) { return v >= '0' && v <= '9'; })
HideFromHelpis renamed toHiddenand now also hides an argument from shell completion.AllowedValuesnow accepts values as run-time parameters, not as template parameters.
For example, replace this
.AllowedValues!(["value1", "value2", value3"])
with
.AllowedValues("value1", "value2", value3")
AllowNoValuenow accepts a value as run-time parameter, not as template parameter.
For example, replace this
.AllowNoValue!"myvalue"
with
.AllowNoValue("myvalue")
RequireNoValueis renamed toForceNoValueand now accepts a value as run-time parameter, not as template parameter.
For example, replace this
.RequireNoValue!"myvalue"
with
.ForceNoValue("myvalue")
ArgumentValueis renamed toAllowedValues.
For example, replace this
.ArgumentValue("value1", "value2")
with
.AllowedValues("value1", "value2")
- Dropped support for DMD-2.099.
Enhancements and bug fixes
- Fix for
Command()UDA:ArrayIndexErroris not thrown anymore. - Error messages are printed with
Config.stylingand now have the same styling as help text. - New
errorMessagePrefixmember inConfig.stylingthat determines the style of "Error:" prefix in error messages. This prefix is printed in red by default. - New checks:
- Argument is not allowed to be in multiple argument groups.
- Subcommand name can't start with
Config.shortNamePrefix(dash-by default) orConfig.longNamePrefix(double-dash--by default). - Functions for parsing customization (
PreValidation,Parse,ValidationandAction) can now returnResultthroughResult.SuccessorResult.Errorand provide error message if needed. - Fixes for bundling of single-letter arguments.
For example, the following cases are supported for
bool b; string s;arguments: ./prog -b -s=abc./prog -b -s abc./prog -b -sabc./prog -bsabc./prog -bs=abc- Fixes for parsing of multiple values. Only these formats are supported:
./prog --arg value1 value2 value3./prog --arg=value1,value2,value3- Removed support for delegate in
Config.errorHandler,Description,ShortDescription,UsageandEpilogbecause of compiler'sclosures are not yet supported in CTFE. - Long and short names of arguments are now separated:
- Short names are single-character names by default. This can be overridden by explicitly specifying short and long names in
NamedArgumentUDA. - Short names can be specified with short prefix only (e.g.
-). - Long names can be specified with long prefix only (e.g.
--). - Added new
Config.assignKeyValueCharparameter to customize assign character inkey=valuesyntax for arguments with associative array type. - Added support of
@PositionalArgumentwithout explicit position. In this case positions are determined in the order of declarations of members.
Other changes
- Removed dependency on
std.regex. - New code base: library implementation is almost fully rewritten (public API was not changed in this effort). Unnecessary templates were replaced with regular functions. As a result, compilation time and memory usage were improved: 2x better for
dub buildand 4x better fordub test. - New documentation </details>
Features
- Positional arguments:
- Automatic type conversion of the value.
- Required by default, can be marked as optional.
- Named arguments:
- Multiple names are supported, including short (
-v) and long (--verbose) ones. - Case-sensitive/-insensitive parsing.
- Bundling of short names (
-vvvis same as-v -v -v). - Equals sign is accepted (
-v=debug,--verbose=debug). - Automatic type conversion of the value.
- Optional by default, can be marked as required.
- Multiple names are supported, including short (
- Support different types of destination data member:
- Scalar (e.g.,
int,float,bool). - String arguments.
- Enum arguments.
- Array arguments.
- Hash (associative array) arguments.
- Callbacks.
- Scalar (e.g.,
- Different workflows are supported:
- Mixin to inject standard
mainfunction. - Parsing of known arguments only (returning not recognized ones).
- Enforcing that there are no unknown arguments provided.
- Mixin to inject standard
- Shell completion.
- Options terminator (e.g., parsing up to
--leaving any argument specified after it). - Arguments groups.
- Subcommands.
- Fully customizable parsing:
- Raw (
string) data validation (i.e., before parsing). - Custom conversion of argument value (
string-> anydestination type). - Validation of parsed data (i.e., after conversion to
destination type). - Custom action on parsed data (doing something different from storing the parsed value in a member of destination object).
- Raw (
- ANSI colors and styles.
- Built-in reporting of error happened during argument parsing.
- Built-in help generation.
Documentation
Please find up-to-date documentation here.
- ~api-with-named-parameters released 6 months ago
- andrey-zherikov/argparse
- BSL-1.0
- Copyright © 2021, Andrey Zherikov
- Authors:
- Dependencies:
- none
- Versions:
-
Show all 30 versions2.0.2 2025-Oct-01 2.0.1 2025-Sep-29 2.0.0 2025-Sep-02 2.0.0-rc2 2025-Jul-05 2.0.0-rc1 2025-Jul-01 - Download Stats:
-
-
3 downloads today
-
28 downloads this week
-
140 downloads this month
-
4310 downloads total
-
- Score:
- 2.6
- Short URL:
- argparse.dub.pm