Update Rust crate clap to v4
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
clap | dependencies | major |
2 -> 4
|
Release Notes
clap-rs/clap (clap)
v4.4.2
Performance
- Improve build times by removing
once_cell
dependency
v4.4.1
Features
- Stabilize
Command::styles
v4.4.0
Compatibility
- Update MSRV to 1.70.0
v4.3.24
Fixes
- Ensure column padding is preserved in
--help
with custom templates
v4.3.23
Fixes
- Fixed
UnknownArgumentValueParser
to not error on flag's absence
v4.3.22
Features
- Add
UnknownArgumentValueParser
for injecting errors for improving the experience with errors
v4.3.21
Features
- Expose
TryMapValueParser
so the type can be named
v4.3.20
Features
-
Command::mut_args
for modifying all arguments en masse
v4.3.19
Fixes
-
(parse) Respect
value_terminator
even in the presence of later multiple-value positional arguments
v4.3.18
Fixes
-
(parse) Suggest
--
in fewer places where it won't work
v4.3.17
Fixes
-
(help) Address a regression in wrapping
PossibleValue
descriptions in--help
v4.3.16
Fixes
- Don't assert when stateful value parsers fail on defaults (e.g. checking if a path exists)
v4.3.15
Features
-
(unstable-styles) Re-export
anstyle
Documentation
- (unstable-styles) Provide more examples
v4.3.14
Features
-
ArgAction::HelpShort
andArgAction::HelpLong
for explicitly specifying which style of help to display
Fixes
- Skip
[OPTIONS]
in usage if a help or versionArgAction
is used
v4.3.13
v4.3.12
Fixes
- (derive) Don't error on enum variant field attributes
v4.3.11
Features
-
(derive) Support fields wrapped in
num::Wrapping
,Box
, orArc
-
(derive) Support
Box<str>
,Box<OsStr>
, andBox<Path>
v4.3.10
Performance
- Drop a dependency, reducing binary size by 1.3 KiB
v4.3.9
Fixes
-
Command::ignore_errors
no longer masks help/version
v4.3.8
Fixes
- Error on ambiguity with
infer_long_arg
, rather than arbitrarily picking one, matching the documentation and subcommand's behavior
v4.3.7
Documentation
- Further clarify magic behavior in derive tutorial
- Further clarify derive API's relationship to builder within the tutorial
v4.3.6
Documentation
- Suggest
clio
v4.3.5
-
ColorChoice::possible_values
is added to simplify things for builder users
Fixes
-
ColorChoice::to_possible_value
no longer includes descriptions, encouraging shorter help where possible
v4.3.4
Features
- Add
Error::exit_code
v4.3.3
Features
-
Command::defer
for delayed initialization of subcommands to reduce startup times of large applications like deno
v4.3.2
Fixes
- Ensure column padding is preserved in
--help
with custom templates
v4.3.1
Fixes
-
(parse) Respect
value_terminator
even in the presence of later multiple-value positional arguments
v4.3.0
Fixes
- (assert) Allow multiple, value-terminated, positional arguments
-
(assert) Clear up language on
last
assertion - (parser) Correctly assign values to arguments when using multiple, value-termianted, positional arguments
-
(parser) Ensure
value_terminator
has higher precedence thanallow_hyphen_values
-
(help) Only use next-line-help on subcommand list when explicitly specified, not just with
--help
- (help) Correctly align possible values list
- (help) Don't waste code, vertical space in moving possible value descriptions to next line
v4.2.7
Fixes
- Correctly track remaining length for iterators provided by
ArgMatches
v4.2.6
Features
impl Eq<std::any::TypeId> for clap_builder::util::AnyValueId
v4.2.5
Fixes
- Improve panic when a group requires a non-existent ID
v4.2.4
Documentation
- Corrected docs for
Command::style
v4.2.3
Features
-
Command::styles
for theming help/errors (behindunstable-styles
)
v4.2.2
Internal
- Update dependencies
v4.2.1
Fixes
- Don't highlight uninteresting parts of the error message
v4.2.0
Compatibility
- Removed the languishing
unstable-replace
feature (open to discussion at #2836) - Removed the stablized
unstable-grouped
feature
Features
- Allow any
StyledStr
to accept text styled with ANSI escape codes - Respect
CLICOLOR
,CLICOLOR_FORCE
Fixes
- Lighten the tone for "unexpected argument" errors (open to discussion at #4638)
v4.1.14
Features
-
(derive)
#[group]
raw attribute support
Performance
-
(derive)
clap_builder
was pulled out ofclap
so it could build in parallel toclap_derive
-
os_str_bytes
dependency was removed for faster builds and smaller binaries
v4.1.13
Performance
- Reduce repeated alloc calls when building a
Command
- Reduce duplicate dependencies for faster builds
v4.1.12
Internal
-
(derive) Update to
syn
v2
Performance
-
(derive) Faster build times by dropping
proc-macro-error
dependency
v4.1.11
Internal
- Update
bitflags
v4.1.10
Fixes
- (help) On Windows, avoid underlined text artifacts
v4.1.9
Fixes
-
(assert) Improve the assert when using the wrong action with
get_count
/get_flag
v4.1.8
Fixes
-
(derive) Don't
deny
lints on the users behalf
v4.1.7
Fixes
- (derive) Hide some nightly clippy warnings
v4.1.6
Fixes
-
(help) Don't show long help for
--help
just because hidden possible values include a description
v4.1.5
Fixes
-
(help) Don't show long help for
--help
just because a hidden arg has a possible value with a description
v4.1.4
Fixes
-
(help) Respect
disable_colored_help
when usingarg_required_else_help
Performance
- Speed up compiling
arg!
macro
v4.1.3
Fixes
- (error) Improve suggested flag/value/subcommand when two share a long preifx
-
(error) When suggesting one of several subcommands, use the plural
subcommands
, rather thansubcommand
v4.1.2
Fixes
- In documentation, refer to
get_flag
, rather thanget_one::<bool>
v4.1.1
Features
-
(derive)
#[group]
raw attribute support
Performance
-
(derive)
clap_builder
was pulled out ofclap
so it could build in parallel toclap_derive
-
os_str_bytes
dependency was removed for faster builds and smaller binaries
v4.1.0
Compatibility
MSRV changed to 1.64.0
For apps with custom --help
and --version
flags:
- Descriptions for
--help
and--version
changed
When apps have errors imitating clap's error style:
- Error message style was changed, including
- Moving away from "did you mean" to tips
- Leading letter is lower case
- "For more" added some punctuation
Features
-
ArgMatches::get_occurrences
support for argument values to be grouped by their occurrence
Fixes
-
(derive) Allow
upgrade_from
when arguments / subcommands are explicitly marked as required -
(help) Try be more clearer and succinct with
--help
and--version
(also helps with overflow) - (error) Try to be more clearer and succinct with error messages
- (error) Officially adopt an error style guide
v4.0.32
Fixes
-
(parser) When overriding
required(true)
, consider args that conflict with its group
v4.0.31
Performance
- Speed up parsing when a lot of different flags are present (100 unique flags)
v4.0.30
Fixes
-
(error) Improve error for
args_conflicts_with_subcommand
v4.0.29
v4.0.28
Fixes
- Fix wasm support which was broken in 4.0.27
v4.0.27
Features
- Have
Arg::value_parser
acceptVec<impl Into<PossibleValue>>
- Implement
Display
andFromStr
forColorChoice
Fixes
- Remove soundness issue by switching from
atty
tois-terminal
v4.0.26
Fixes
-
(error) Fix typos in
ContextKind::as_str
v4.0.25
Features
- (error) Report available subcommands when required subcommand is missing
v4.0.24
Fixes
- Avoid panic when printing an argument that isn't built
v4.0.23
Fixes
- Don't panic on reporting invalid-long errors when followed by invalid UTF8
-
(help) Clarified argument to
help
subcommand
v4.0.22
Fixes
- (help) Don't overflow into next-line-help early due to stale (pre-v4) padding calculations
v4.0.21
Features
-
(derive)
long_about
andlong_help
attributes, without a value, force using doc comment (before it wouldn't be set if there wasn't anything different than the short help)
v4.0.20
Fixes
- (derive) Allow defaulted value parser for '()' fields
v4.0.19
Features
-
ColorChoice
now implementsValueEnum
v4.0.18
Fixes
-
(derive) Allow
#[command(skip)]
to also work with enum variants with a value
v4.0.17
Fixes
- Allow using
Arg::last(true)
withArg::value_hint(ValueHint::CommandWithArguments)
v4.0.16
Fixes
-
Arg::exclusive(true)
should not be exclusive with the argument's ownArgGroup
v4.0.15
Fixes
-
(error) Don't suggest
--
when it doesn't help - (error) Be more consistent in quoting, punctuation, and indentation in errors
v4.0.14
Fixes
- Only put
ArgGroup
inArgMatches
when explicitly specified, fixing derives handling of option-flattened fields (#4375)
v4.0.13
Features
-
(derive) Allow
()
for fields to mean "don't read" (#4371)
v4.0.12
Features
- Added
TypedValueParser::try_map
for when adapting an existingTypedValueParser
can fail -
(error) Create errors like clap with
Error::new
,Error::with_cmd
, andError::insert
v4.0.11
Fixes
- (help) Fix wrapping calculations with ANSI escape codes
v4.0.10
Features
v4.0.9
Fixes
-
(derive) Process doc comments for
#[command(subcommand)]
like in clap v3
v4.0.8
Fixes
-
(derive) Remove a low-value assert preventing defaulting
Help
andVersion
actions
v4.0.7
Features
- (derive) Populate implicit ArgGroup (#3165)
Fixes
-
(derive) Support
#[group(skip)]
onParser
derive - (derive) Tell users about implicit arg groups when running into group name conflicts
- (error) Don't report unrelated groups in conflict or requires errors
v4.0.6
Features
v4.0.5
v4.0.4
Fixes
- (error) Specialize the self-conflict error to look like clap v3
v4.0.3
Fixes
-
(parser) When overriding
required(true)
, consider args that conflict with its group
v4.0.2
v4.0.1
Features
-
ColorChoice
now implementsValueEnum
v4.0.0
Highlights
Arg::num_args(range)
Clap has had several ways for controlling how many values will be captured without always being clear on how they interacted, including
Arg::multiple_values(true)
Arg::number_of_values(4)
Arg::min_values(2)
Arg::max_values(20)
Arg::takes_value(true)
These have now all been collapsed into Arg::num_args
which accepts both
single values and ranges of values. num_args
controls how many raw arguments
on the command line will be captured as values per occurrence and independent
of value delimiters.
See Issue 2688 for more background.
Polishing Help
Clap strives to give a polished CLI experience out of the box with little
ceremony. With some feedback that has accumulated over time, we took this
release as an opportunity to re-evaluate our --help
output to make sure it is
meeting that goal.
In doing this evaluation, we wanted to keep in mind:
- Whether other CLIs had ideas that make sense to apply
- Providing an experience that fits within the rest of applications and works across all shells
Before:
git
A fictional versioning CLI
USAGE:
git <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
SUBCOMMANDS:
add adds things
clone Clones repos
help Print this message or the help of the given subcommand(s)
push pushes things
stash
After:
A fictional versioning CLI
Usage: git <COMMAND>
Commands:
clone Clones repos
push pushes things
add adds things
stash
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help information
- name/version header was removed because we couldn't justify the space it occupied when
- Usage already includes the name
-
--version
is available for showing the same thing (if the program has a version set)
- Usage was dropped to one line to save space
- Focus is put on the subcommands
- Headings are now Title case
- The more general term "command" is used rather than being explicit about being "subcommands"
- The output is more dense with the expectation that it won't affect legibility but will allow more content
- We've moved to a more neutral palette for highlighting elements (not highlighted above)
In talking to users, we found some that liked clap's man
-like experience.
When deviating from this, we are making the assumption that those are more
power users and that the majority of users wouldn't look as favorably on being
consistent with man
.
See Issue 4132 for more background.
More Dynamicism
Clap's API has focused on &str
for performance but this can make
dealing with owned data difficult, like #[arg(default_value_t)]
generating a
String from the default value.
Additionally, to avoid ArgMatches
from borrowing (and for some features we
decided to forgo), clap took the &str
argument IDs and hashed them. This
prevented us from providing a usable API for iterating over existing arguments.
Now clap has switched to a string newtype that gives us the flexibility to
decide whether to use &'static str
, Cow<'static, str>
for fast dynamic behavior, or
Box<str>
for dynamic behavior with small binary size.
As an extension of that work, you can now call ArgMatches::ids
to iterate
over the arguments and groups that were found when parsing. The newtype Id
was used to prevent some classes of bugs and to make it easier to understand
when opaque Ids are used vs user-visible strings.
Clearing Out Deprecations
Instead of doing all development on clap 4.0.0, we implemented a lot of new features during clap 3's development, deprecating the old API while introducing the new API, including:
- Replacing the implicit behavior for args when parsing them with
ArgAction
- Replacing various one-off forms of value validation with the
ValueParser
API- Allowing derives to automatically do the right thing for
PathBuf
(allowing invalid UTF-8)
- Allowing derives to automatically do the right thing for
- Replacing
AppSettings
andArgSettings
enums with getters/setters - Clarifying terms and making them more consistent
Migrating
Steps:
- Upgrade to v3 if you haven't already
- Add CLI tests (including example below),
-h
and--help
output at a minimum (recommendation: trycmd for snapshot testing) -
If using Builder API: Explicitly set the
arg.action(ArgAction::...)
on each argument (StoreValue
for options andIncOccurrences
for flags) - Run
cargo check --features clap/deprecated
and resolve all deprecation warnings - Upgrade to v4
- Update feature flags
-
If
default-features = false
, runcargo add clap -F help,usage,error-context
- Run
cargo add clap -F wrap_help
unless you want to hard code line wraps
- Resolve compiler errors
- Resolve behavior changes (see "subtle changes" under BREAKING CHANGES)
- At your leisure: resolve new deprecation notices
Example test (derive):
#[derive(clap::Parser)]
struct Cli {
...
}
#[test]
fn verify_cli() {
use clap::CommandFactory;
Cli::command().debug_assert()
}
Example test (builder):
fn cli() -> clap::Command {
...
}
#[test]
fn verify_cli() {
cli().debug_assert();
}
Note: the idiomatic / recommended way of specifying different types of args in the Builder API has changed:
Before
.arg(Arg::new("flag").long("flag")) # --flag
.arg(Arg::new("option").long("option").takes_value(true)) # --option <option>
After:
.arg(Arg::new("flag").long("flag").action(ArgAction::SetTrue)) # --flag
.arg(Arg::new("option").long("option")) # --option <option>
In particular, num_args
(the replacement for takes_value
) will default appropriately
from the ArgAction
and generally only needs to be set explicitly for the
other num_args
use cases.
Breaking Changes
Subtle changes (i.e. compiler won't catch):
-
arg!
now sets one of (#3795):-
ArgAction::SetTrue
, requiringArgMatches::get_flag
instead ofArgMatches::is_present
-
ArgAction::Count
, requiringArgMatches::get_count
instead ofArgMatches::occurrences_of
-
ArgAction::Set
, requiringArgMatches::get_one
instead ofArgMatches::value_of
-
ArgAction::Append
, requiringArgMatches::get_many
instead ofArgMatches::values_of
-
-
ArgAction::Set
,ArgAction::SetTrue
, andArg::Action::SetFalse
now conflict by default to be likeArgAction::StoreValue
andArgAction::IncOccurrences
, requiringcmd.args_override_self(true)
to override instead (#4261) - By default, an
Arg
s default action isArgAction::Set
, rather thanArgAction::IncOccurrence
to reduce confusing magic through consistency (#2687, #4032, see also #3977) -
mut_arg
can no longer be used to customize help and version arguments, instead disable them (Command::disable_help_flag
,Command::disable_version_flag
) and provide your own (#4056) - Removed lifetimes from
Command
,Arg
,ArgGroup
, andPossibleValue
, assuming'static
.string
feature flag will enable support forString
s (#1041, #2150, #4223) -
arg!(--flag <value>)
is now optional, instead of required. Add.required(true)
at the end to restore the original behavior (#4206) - Added default feature flags,
help
,usage
anderror-context
, requiring adding them back in ifdefault-features = false
(#4236) -
(parser) Always fill in
""
argument for external subcommands to make it easier to distinguish them from built-in commands (#3263) -
(parser) Short flags now have higher precedence than hyphen values with
Arg::allow_hyphen_values
, to be consistent withCommand::allow_hyphen_values
(#4187) -
(parser)
Arg::value_terminator
must be its own argument on the CLI rather than being in a delimited list (#4025) -
(help) Line wrapping of help is now behind the existing
wrap_help
feature flag, either enable it or hard code your wraps (#4258) -
(help) Make
DeriveDisplayOrder
the default and removed the setting. To sort help, setnext_display_order(None)
(#2808) -
(help) Subcommand display order respects
Command::next_display_order
instead ofDeriveDisplayOrder
and using its own initial display order value (#2808) -
(help) Subcommands are now listed before arguments. To get the old behavior, see
Command::help_template
(#4132) -
(help) Help headings are now title cased, making any user-provided help headings inconsistent. To get the old behavior, see
Command::help_template
,Arg::help_heading
, andCommand::subcommand_help_heading
(#4132) -
(help) "Command" is used as the section heading for subcommands and
COMMAND
for the value name. To get the old behavior, seeCommand::subcommand_help_heading
andArg::subcommand_value_name
(#4132, #4155) - (help) Whitespace in help output is now trimmed to ensure consistency regardless of how well a template matches the users needs. (#4132, #4156)
-
(help) name/version/author are removed by default from help output. To get the old behavior, see
Command::help_template
. (#4132, #4160) - (help) Indentation for second-line usage changed. (#4132, #4188)
-
(env) Parse
--help
and--version
like anyArgAction::SetTrue
flag (#3776) -
(derive) Leave
Arg::id
asverbatim
casing, requiring updating of string references to other args like inconflicts_with
orrequires
(#3282) -
(derive) Doc comments for
ValueEnum
variants will now show up in--help
(#3312) -
(derive) When deriving
Args
, andArgGroup
is created using the type's name, reserving it for future use (#2621, #4209) -
(derive)
next_help_heading
can now leak out of a#[clap(flatten)]
, like all other command settings (#4222)
Easier to catch changes:
- Looking up a group in
ArgMatches
now returns the argId
s, rather than the values to reduce overhead and offer more flexibility. (#4072) - Changed
Arg::number_of_values
(average-across-occurrences) toArg::num_args
(per-occurrence) (raw CLI args, not parsed values) (#2688, #4023) - Replace
Arg::min_values
(across all occurrences) withArg::num_args(N..)
(per occurrence) to reduce confusion over different value count APIs (#4023) - Replace
Arg::max_values
(across all occurrences) withArg::num_args(1..=M)
(per occurrence) to reduce confusion over different value count APIs (#4023) - Replace
Arg::multiple_values(true)
withArg::num_args(1..)
andArg::multiple_values(false)
withArg::num_args(0)
to reduce confusion over different value count APIs (#4023) - Replace
Arg::takes_value(true)
withArg::num_args(1)
andArg::takes_value(false)
withArg::num_args(0)
to reduce confusion over different value count APIs - Remove
Arg::require_value_delimiter
, either users could useArg::value_delimiter
or implement a custom parser withTypedValueParser
as it was mostly to makemultiple_values(true)
act likemultiple_values(false)
and isn't needed anymore (#4026) -
Arg::new("help")
andArg::new("version")
no longer implicitly disable the built-in flags and be copied to all subcommands, instead disable the built-in flags (Command::disable_help_flag
,Command::disable_version_flag
) and mark the custom flags asglobal(true)
. (#4056) -
Arg::short('h')
no longer implicitly disables the short flag for help, instead disable the built-in flags (Command::disable_help_flag
,Command::disable_version_flag
) provide your ownArg::new("help").long("help").action(ArgAction::Help).global(true)
. (#4056) -
ArgAction::SetTrue
andArgAction::SetFalse
now prioritizeArg::default_missing_value
over their standard behavior (#4000) - Changed
Arg::requires_ifs
andArg::default_value*_ifs*
to taking anArgPredicate
, removing ambiguity withNone
when accepting owned and borrowed types (#4084) - Removed
PartialEq
andEq
fromCommand
so we could change external subcommands to use aValueParser
(#3990) - Various
Arg
,Command
, andArgGroup
calls were switched from accepting&[]
to[]
viaIntoIterator
to be more flexible (#4072) -
Arg::short_aliases
and other builder functions that took&[]
need the&
dropped (#4081) -
ErrorKind
andResult
moved into theerror
module -
ErrorKind::EmptyValue
replaced withErrorKind::InvalidValue
to remove an unnecessary special case (#3676, #3968) -
ErrorKind::UnrecognizedSubcommand
replaced withErrorKind::InvalidSubcommand
to remove an unnecessary special case (#3676) - Changed the default type of
allow_external_subcommands
fromString
toOsString
as that is less likely to cause bugs in user applications (#3990) -
(help)
Command::render_usage
now returns aStyledStr
(#4248) -
(derive) Changed the default for arguments from
parse
tovalue_parser
, removingparse
support (#3827, #3981)-
#[clap(value_parser)]
and#[clap(action)]
are now redundant
-
-
(derive)
subcommand_required(true).arg_required_else_help(true)
is set instead ofSubcommandRequiredElseHelp
to give more meaningful errors when subcommands are missing and to reduce redundancy (#3280) -
(derive) Remove
arg_enum
attribute in favor ofvalue_enum
to match the new name (we didn't have support in v3 to mark it deprecated) (#4127) - (parser) Assert when the CLI looksup an unknown args when external subcommand support is enabled to help catch bugs (#3703)
-
(assert) Sometimes
Arg::default_missing_value
didn't requirenum_args(0..=N)
, now it does (#4023) -
(assert) Leading dashes in
Arg::long
are no longer allowed (#3691) -
(assert) Disallow more
value_names
thannum_args
(#2695) -
(assert) Always enforce that version is specified when the
ArgAction::Version
is used -
(assert) Add missing
#[track_caller]
s to make it easier to debug asserts -
(assert) Ensure
overrides_with
IDs are valid -
(assert) Ensure no self-
overrides_with
now that Actions replace it - (assert) Ensure subcommand names are not duplicated
-
(assert) Assert on
mut_arg
receiving an invalid arg ID ormut_subcommand
receiving an invalid command name
Compatibility
MSRV is now 1.60.0
Deprecated
-
Arg::use_value_delimiter
in favor ofArg::value_delimiter
to avoid having multiple ways of doing the same thing -
Arg::requires_all
in favor ofArg::requires_ifs
now that it takes anArgPredicate
to avoid having multiple ways of doing the same thing -
Arg::number_of_values
in favor ofArg::num_args
to clarify semantic differences -
default_value_os
,default_values_os
,default_value_if_os
, anddefault_value_ifs_os
as the non_os
variants now accept either astr
or anOsStr
(#4141) -
Arg::env_os
in favor ofArg::env
-
Command::dont_collapse_args_in_usage
is now the default (#4151) -
Command::trailing_var_arg
in favor ofArg::trailing_var_arg
to make it clearer which arg it is meant to apply to (#4187) -
Command::allow_hyphen_values
in favor ofArg::allow_hyphen_values
to make it clearer which arg it is meant to apply to (#4187) -
Command::allow_negative_numbers
in favor ofArg::allow_negative_numbers
to make it clearer which arg it is meant to apply to (#4187) -
(help) Deprecated
Command::write_help
andCommand::write_long_help
in favor ofCommand::render_help
andCommand::render_long_help
(#4248) -
(derive)
structopt
andclap
attributes in favor of the more specificcommand
,arg
, andvalue
to open the door for more features and clarify relationship to the builder (#1807, #4180) -
(derive)
#[clap(value_parser)]
and#[clap(action)]
defaulted attributes (its the default) (#3976)
Behavior Changes
-
(help) With
wrap_help
feature, if the terminal size cannot be determined,LINES
andCOLUMNS
variables are used (#4186)
Features
-
Arg::num_args
now accepts ranges, allowing setting both the minimum and maximum number of values per occurrence (#2688, #4023) - Allow non-bool
value_parser
s forArgAction::SetTrue
/ArgAction::SetFalse
(#4092) - Add
From<&OsStr>
,From<OsString>
,From<&str>
, andFrom<String>
tovalue_parser!
(#4257) - Allow resetting most builder methods
- Can now pass runtime generated data to
Command
,Arg
,ArgGroup
,PossibleValue
, etc without managing lifetimes with thestring
feature flag (#2150, #4223) - New default
error-context
,help
andusage
feature flags that can be turned off for smaller binaries (#4236) - Added
StyledStr::ansi()
toDisplay
with ANSI escape codes (#4248) -
(error)
Error::apply
for changing the formatter for dropping binary size (#4111) -
(error)
Error::render
for formatting the error into aStyledStr
-
(help) Show
PossibleValue::help
in long help (--help
) (#3312) -
(help) New
{tab}
variable forCommand::help_template
(#4161) -
(help)
Command::render_help
andCommand::render_long_help
for formatting the error into aStyledStr
(#3873, #4248) -
(help)
Command::render_usage
now returns aStyledStr
(#4248)
Fixes
- Verify
required
is not used with conditional required settings (#3660) - Replaced
cmd.allow_invalid_for_utf8_external_subcommands
withcmd.external_subcommand_value_parser
(#3733) -
Arg::default_missing_value
now applies per occurrence rather than if a value is missing across all occurrences (#3998) -
arg!(--long [value])
to accept0..=1
per occurrence rather than across all occurrences, making it safe to use withArgAction::Append
(#4001) - Allow
OsStr
s forArg::{required_if_eq,required_if_eq_any,required_if_eq_all}
(#4084) -
(help) With
wrap_help
feature, if the terminal size cannot be determined,LINES
andCOLUMNS
variables are used (#4186) -
(help) Use
Command::display_name
in the help title rather thanCommand::bin_name
-
(help) Show when a flag is
ArgAction::Count
by adding an...
(#4003) - (help) Use a more neutral palette for coloring (#4132, #4117)
- (help) Don't rely on ALL CAPS for help headers (#4132, #4123)
- (help) List subcommands first, focusing the emphasis on them (#4132, #4125)
-
(help) Do not include global args in
cmd help help
(#4131) -
(help) Use
[positional]
in list when relevant (#4144) -
(help) Show all
[positional]
in usage (#4151) - (help) Polish up subcommands by referring to them as commands (#4132, #4155)
- (help) Trim extra whitespace to avoid artifacts from different uses of templates (#4132, #4156)
-
(help) Hint to the user the difference between
-h
/--help
when applicable (#4132, #4159) - (help) Shorten help by eliding name/version/author (#4132, #4160)
-
(help) When short help is long enough to activate
next_line_help
, don't add blank lines (#4132, #4190) - (help) Make help output more dense (reducing horizontal whitespace) (#4132, #4192)
- (help) Separate subcommand flags with "," like option flags (#4232, #4235)
- (help) Quote the suggested help flag (#4220)
-
(version) Use
Command::display_name
rather thanCommand::bin_name
(#3966) -
(parser) Always fill in
""
argument for external subcommands (#3263) -
(parser) Short flags now have higher precedence than hyphen values with
Arg::allow_hyphen_values
, likeCommand::allow_hyphen_values
(#4187) -
(parser) Prefer
InvalidSubcommand
overUnknownArgument
in more cases (#4219) - (derive) Detect escaped external subcommands that look like built-in subcommands (#3703)
-
(derive) Leave
Arg::id
asverbatim
casing (#3282) -
(derive) Default to
#[clap(value_parser, action)]
instead of#[clap(parse)]
(#3827)
v3.2.25
[3.2.25] - 2023-04-27
Fixes
- (derive) Resolve warnings in generated code
v3.2.24
[3.2.24] - 2023-04-25
Fixes
- (derive) Resolve warnings in generated code
v3.2.23
[3.2.23] - 2022-10-24
Fixes
- Upgrade to
textwrap
0.16
v3.2.22
[3.2.22] - 2022-09-16
Fixes
- Unify dependencies on
terminal_size
to the 0.2 release
v3.2.21
[3.2.21] - 2022-09-12
Features
-
TypedValueParser::map
to allow reusing existing value parsers for other purposes
v3.2.20
[3.2.20] - 2022-09-02
Features
-
ArgMatches::get_count
help forArgAction::Count
-
ArgMatches::get_flag
help forArgAction::SetTrue
/ArgAction::SetFalse
v3.2.19
[3.2.19] - 2022-08-30
Fixes
-
(help) Ensure required arguments for parent commands aren't shown in their subcommands when using
args_conflicts_with_subcommand
v3.2.18
Fixes
-
(help)
Command::print_help
now respectsCommand::colored_help
- (derive) Improved error messages
v3.2.17
Fixes
-
(derive) Expose
#[clap(id = ...)]
attribute to match Arg's latest API
v3.2.16
Fixes
- Ensure required arguments appear in errors when they are also members of a group (#4004)
v3.2.15
Features
-
(derive) New
default_values_t
anddefault_values_os_t
attributes
v3.2.14
Fixes
- A
multiple_values
positional followed by another positional now works with multiple flags
v3.2.13
Documentation
- Pulled in tutorials, cookbook, and derive reference into rustdoc
v3.2.12
Fixes
- Allow an arg to declare a conflict with a group
v3.2.11
Features
- Added
Arg::get_all_short_aliaes
andArg::get_all_aliases
v3.2.10
Fixes
- Loosen lifetime on
Command::mut_subcommand
v3.2.8
Features
- Added
Command::mut_subcommand
to mirrorCommand::mut_arg
v3.2.7
Fixes
- Global arguments should override env-sourced arguments
v3.2.6
Fixes
- Don't panic when parsing
--=
v3.2.5
Fixes
-
(derive) Fix regression with
#[clap(default_value_os_t ...)]
introduced in v3.2.3
v3.2.4
Fixes
-
(derive) Provide more clearer deprecation messages for
#[clap(parse)]
attribute (#3832)
v3.2.3
Fixes
- Moved deprecations to be behind the
deprecated
Cargo.toml feature (#3830)- For now, it is disabled by default though we are considering enabling it by default as we release the next major version to help draw attention to the deprecation migration path
v3.2.2
Fixes
- (derive) Improve the highlighted code for deprecation warnings
gated behind unstable-v4
-
(derive) Default to
#[clap(value_parser, action)]
instead of#[clap(parse)]
(#3827)
v3.2.1
Fixes
-
(help)
Command::print_help
now respectsCommand::colored_help
- (derive) Improved error messages
v3.2.0
Compatibility
MSRV is now 1.56.0 (#3732)
Behavior
- Defaults no longer satisfy
required
and its variants (#3793) - When misusing
ArgMatches::value_of
and friends, debug asserts were turned into panics
Moving (old location deprecated)
-
clap::{PossibleValue, ValueHint}
toclap::builder::{PossibleValue, ValueHint}
-
clap::{Indices, OsValues, ValueSource, Values}
toclap::parser::{Indices, OsValues, ValueSource, Values}
-
clap::ArgEnum
toclap::ValueEnum
(#3799)
Replaced
-
Arg::allow_invalid_utf8
withArg::value_parser(value_parser!(PathBuf))
(#3753) -
Arg::validator
/Arg::validator_os
withArg::value_parser
(#3753) -
Arg::validator_regex
with users providing their ownbuilder::TypedValueParser
(#3756) -
Arg::forbid_empty_values
withbuilder::NonEmptyStringValueParser
/builder::PathBufValueParser
(#3753) -
Arg::possible_values
withArg::value_parser([...])
,builder::PossibleValuesParser
, orbuilder::EnumValueParser
(#3753) -
Arg::max_occurrences
witharg.action(ArgAction::Count).value_parser(value_parser!(u8).range(..N))
for flags (#3797) -
Arg::multiple_occurrences
withArgAction::Append
orArgAction::Count
though positionals will needArg::multiple_values
(#3772, #3797) -
Command::args_override_self
withArgAction::Set
(#2627, #3797) -
AppSettings::NoAutoVersion
withArgAction
orCommand::disable_version_flag
(#3800) -
AppSettings::NoHelpVersion
withArgAction
orCommand::disable_help_flag
/Command::disable_help_subcommand
(#3800) -
ArgMatches::{value_of, value_of_os, value_of_os_lossy, value_of_t}
withArgMatches::{get_one,remove_one}
(#3753) -
ArgMatches::{values_of, values_of_os, values_of_os_lossy, values_of_t}
withArgMatches::{get_many,remove_many}
(#3753) -
ArgMatches::is_valid_arg
withArgMatches::{try_get_one,try_get_many}
(#3753) -
ArgMatches::occurrences_of
withArgMatches::value_source
orArgAction::Count
(#3797) -
ArgMatches::is_present
withArgMatches::contains_id
orArgAction::SetTrue
(#3797) -
ArgAction::StoreValue
withArgAction::Set
orArgAction::Append
(#3797) -
ArgAction::IncOccurrences
withArgAction::SetTrue
orArgAction::Count
(#3797) -
(derive)
#[clap(parse(...))]
replaced with: (#3589, #3794)- For default parsers (no
parse
attribute), deprecation warnings can be silenced by opting into the new behavior by adding either#[clap(action)]
or#[clap(value_parser)]
(ie requesting the default behavior for these attributes). Alternatively, theunstable-v4
feature changes the default away fromparse
toaction
/value_parser
. - For
#[clap(parse(from_flag))]
replaced with#[clap(action = ArgAction::SetTrue)]
(#3794) - For
#[clap(parse(from_occurrences))]
replaced with#[clap(action = ArgAction::Count)]
though the field's type must beu8
(#3794) - For
#[clap(parse(from_os_str)]
forPathBuf
, replace it with#[clap(value_parser)]
(as mentioned earlier this will callvalue_parser!(PathBuf)
which will auto-select the rightValueParser
automatically). - For
#[clap(parse(try_from_str = ...)]
, replace it with#[clap(value_parser = ...)]
- For most other cases, a type implementing
TypedValueParser
will be needed and specify it with#[clap(value_parser = ...)]
- For default parsers (no
Features
- Parsed, typed arguments via
Arg::value_parser
/ArgMatches::{get_one,get_many}
(#2683, #3732)- Several built-in
TypedValueParser
s available with an API open for expansion -
value_parser!(T)
macro for selecting a parser for a given type (#3732) and open to expansion via theValueParserFactory
trait (#3755) -
[&str]
is implicitly a value parser for possible values - All
ArgMatches
getters do not assume required arguments (#2505) - Add
ArgMatches::remove_*
variants to transfer ownership - Add
ArgMatches::try_*
variants to avoid panics for developer errors (#3621) - Add a
get_raw
to access the underlyingOsStr
s -
PathBuf
value parsers implyValueHint::AnyPath
for completions (#3732)
- Several built-in
- Explicit control over parsing via
Arg::action
(#3774)-
ArgAction::StoreValue
: existingtakes_value(true)
behavior -
ArgAction::IncOccurrences
: existingtakes_value(false)
behavior -
ArgAction::Help
: existing--help
behavior -
ArgAction::Version
: existing--version
behavior -
ArgAction::Set
: Overwrite existing values (likeArg::multiple_occurrences
mixed withCommand::args_override_self
) (#3777) -
ArgAction::Append
: likeArg::multiple_occurrences
(#3777) -
ArgAction::SetTrue
: Treat--flag
as--flag=true
(#3775)- Implies
Arg::default_value("false")
(#3786) - Parses
Arg::env
viaArg::value_parser
- Implies
-
ArgAction::SetFalse
: Treat--flag
as--flag=false
(#3775)- Implies
Arg::default_value("true")
(#3786) - Parses
Arg::env
viaArg::value_parser
- Implies
-
ArgAction::Count
: Treat--flag --flag --flag
as--flag=1 --flag=2 --flag=3
(#3775)- Implies
Arg::default_value("0")
(#3786) - Parses
Arg::env
viaArg::value_parser
- Implies
-
-
(derive) Opt-in to new
Arg::value_parser
/Arg::action
with either#[clap(value_parser)]
(#3589, #3742) /#[clap(action)]
attributes (#3794) -
Command::multicall
is now stable for busybox-like programs and REPLs (#2861, #3684) -
ArgMatches::{try_,}contains_id
for checking if there are values for an argument that mirrors the newget_{one,many}
API
Fixes
- Don't correct argument id in
default_value_ifs_os
(#3815)
parser
- Set
ArgMatches::value_source
andArgMatches::occurrences_of
for external subcommands (#3732) - Use value delimiter for
Arg::default_missing_values
(#3761, #3765) - Split
Arg::default_value
/Arg::env
on value delimiters independent of whether--
was used (#3765) - Allow applying defaults to flags (#3294, 3775)
- Defaults no longer satisfy
required
and its variants (#3793)
v3.1.18
Fixes
- Fix deprecated
arg_enum!
for users migrating to clap3 (#3717) - Verify all
required_unless_present_all
arguments exist - Verify group members exist before processing group members (#3711)
-
(help) Use
...
when not enoughvalue_names
are supplied
gated behind unstable-v4
- Verify
required
is not used with conditional required settings (#3660) - Disallow more
value_names
thannumber_of_values
(#2695) - (parser) Assert on unknown args when using external subcommands (#3703)
-
(parser) Always fill in
""
argument for external subcommands (#3263) - (derive) Detect escaped external subcommands that look like built-in subcommands (#3703)
-
(derive) Leave
Arg::id
asverbatim
casing (#3282)
v3.1.17
Fixes
- Allow value names for
arg!
macro to have dashes when quoted, like longs
v3.1.16
Fixes
-
(parser)
Arg::exclusive
overridesArg::required
, like other conflicts - (error) Don't duplicate arguments in usage
- (error) Don't show hidden arguments in conflict error usage
-
(help) New
help_template
variable{name}
to fix problems with{bin}
- (help) Don't wrap URLs
gated behind unstable-v4
- Leading dashes in
Arg::long
are no longer allowed -
(help) Use
Command::display_name
in the help title rather thanCommand::bin_name
v3.1.15
Fixes
- (error) Render actual usage for unrecognized subcommands
- (multicall) Improve bad command error
- (multicall) Always require a multicall command
- (multicall) Disallow arguments on multicall parent command
- (multicall) More consistent with rest of clap errors
v3.1.14
Fixes
- Panic when calling
Command::build
with a required positional argument nested several layers in subcommands
v3.1.13
Fixes
- Help subcommand and
Command::write_help
now report required arguments in usage in more circumstances - Unknown subcommand for help subcommand flag now reports an error with more context
- More details reported when using
debug
feature - Allow disabling
color
feature withdebug
feature enabled
v3.1.12
Fixes
- Regression in 3.1.11 where the (output) streams were crossed
v3.1.11
Fixes
- Implied conflicts override
Arg::required
, making the behavior consistent with how we calculate conflicts for error reporting - Members of a mutually exclusive
ArgGroup
overrideArg::required
, making the behavior consistent with how we calculate conflicts for error reporting -
Arg::overrides_with
always overrideArg::required
, not just when the parser processes an override
v3.1.10
Features
- Expose
Command::build
for custom help generation or other command introspection needs
v3.1.9
Fixes
- Pin the
clap_derive
version so a compatible version is always used withclap
v3.1.8
Fixes
- Add
Debug
impls to more types
v3.1.7
Fixes
-
(derive) Abort, rather than ignore, when deriving
ArgEnum
with non-unit unskipped variants
v3.1.6
Fixes
- Don't panic when validating delimited defaults (#3541)
- Make it clearer that
cargo
feature is needed - Documentation improvements
v3.1.5
Fixes
- Dependency upgrade
v3.1.4
Features
-
(help) Show
PossibleValue::help
in long help (--help
) (gated behindunstable-v4
) (#3312)
v3.1.3
Fixes
- Don't panic when validating delimited defaults (#3514)
v3.1.2
Fixes
- (derive) Allow other attribute with a subcommand that has subcommands
Documentation
- (examples) List example topics
- (derive) Clarify syntax and relation to builder API
v3.1.1
Fixes
- Fix deprecated
arg_enum!
for users migrating to clap3 (#3717) - Verify all
required_unless_present_all
arguments exist - Verify group members exist before processing group members (#3711)
-
(help) Use
...
when not enoughvalue_names
are supplied
gated behind unstable-v4
- Verify
required
is not used with conditional required settings (#3660) - Disallow more
value_names
thannumber_of_values
(#2695) - (parser) Assert on unknown args when using external subcommands (#3703)
-
(parser) Always fill in
""
argument for external subcommands (#3263) - (derive) Detect escaped external subcommands that look like built-in subcommands (#3703)
-
(derive) Leave
Arg::id
asverbatim
casing (#3282)
v3.1.0
Compatibility
Changes in behavior of note that are not guaranteed to be compatible across releases:
-
(help)
help
subcommand shows long help like--help
, rather than short help (-h
), deprecatedclap::AppSettings::UseLongFormatForHelpSubcommand
(#3440) - (help) Pacman-style subcommands are now ordered the same as usage errors (#3470)
- (help) Pacman-style subcommands use standard alternate syntax in usage (#3470)
Deprecations
-
clap::Command
is now preferred overclap::App
(#3089 in #3472) -
(help)
help
subcommand shows long help like--help
, rather than short help (-h
), deprecatedclap::AppSettings::UseLongFormatForHelpSubcommand
(#3440) -
(error) Deprecate
clap::AppSettings::WaitOnError
, leaving it to the user to implement -
(validation)
clap::Command::subcommand_required(true).arg_required_else_help(true)
is now preferred overclap::AppSettings::SubcommandRequiredElseHelp
(#3280) -
(builder)
clap::AppSettings
are nearly all deprecated and replaced with builder methods and getters (#2717) -
(builder)
clap::ArgSettings
is deprecated and replaced with builder methods and getters (#2717) -
(builder)
clap::Arg::id
andclap::ArgGroup::id
are now preferred overclap::Arg::name
andclap::ArgGroup::name
(#3335) -
(help)
clap::Command::next_help_heading
is now preferred overclap::Command::help_heading
(#1807, #1553) -
(error)
clap::error::ErrorKind
is now preferred overclap::ErrorKind
(#3395) -
(error)
clap::Error::kind()
is now preferred overclap::Error::kind
-
(error)
clap::Error::context()
is now preferred overclap::Error::info
(#2628)
Note: All items deprecated in 3.0.0 are now hidden in the documentation. (#3458)
Features
-
(matches) Add
clap::ArgMatches::value_source
to determine what insert the value (#1345) -
(help) Override derived display order with
clap::Command::next_display_order
(#1807) - (error) Show possible values when an argument doesn't have a value (#3320)
-
(error) New
clap::Error::context
API to open the door for fully-custom error messages (#2628)-
(error)
clap::error::ErrorKind
now implementsDisplay
-
(error)
Fixes
- (builder) Some functions were renamed for consistency and fixing spelling issues
-
(builder) Allow
clap::Command::color
to override previous calls (#3449) - (parse) Propagate globals with multiple subcommands (#3428)
-
(validation) Give
ArgRequiredElseHelp
precedence overSubcommandRequired
(#3456) -
(validation) Default values no longer count as "present" for conflicts, requires,
clap::Command::arg_required_else_help
, etc (#3076, #1264) - (assert) Report invalid defaults (#3202)
-
(help) Clarify how to handle
-h
conflicts (#3403) - (help) Make it easier to debug the addition of help flags (#3425)
- (help) Pacman-style subcommands are now separated with spaces (#3470)
- (help) Pacman-style subcommands are now ordered the same as usage errors (#3470)
- (help) Pacman-style subcommands use standard alternate syntax in usage (#3470)
- (error) Be consistent in showing of required attributes between errors / usage (#3390)
-
(error) Show user's order of possible values, like in
--help
(#1549) -
(error) Allow customizing error type in
clap::error::Result
(#3395)
Performance
-
(error) Reduced stack size of
clap::Error
(#3395)
Documentation
-
(builder) Correct data take accepted for
clap::Arg::validator
-
(derive) Clarify
parse
attribute - (tutorial) Demonstrate custom parsing
- (example) Consistently list out required feature flags (#3448)
v3.0.14
Features
- Added
ArgMatches::args_present()
to check if any args are present - Added
Error::kind()
as we work to deprecate direct member access forError
- Added
App::get_version
- Added
App::get_long_version
- Added
App::get_author
- Added
App::get_subcommand_help_heading
- Added
App::get_subcommand_value_name
- Added
App::get_after_help
- Added
App::get_after_long_help
Performance
- Misc binary size reductions
v3.0.13
Fixes
- Show optional flag values wrapped in
[]
v3.0.12
Features
-
(derive) Support for
default_value_os_t
v3.0.11
Fixes
- Ensure conflicts work when they target a group with a default value
v3.0.10
Fixes
- Resolve
panic!
from v3.0.8 when usingglobal_setting(PropagateVersion)
.
v3.0.9
Features
- Added
App::find_subcommand_mut
v3.0.8
Fixes
- Respected
DisableColoredHelp
oncmd help help
- Provide a little more context when completing arguments for
cmd help
- Provide more context for some asserts
- Small documentation improvements
v3.0.7
Fixes
- Shift more asserts from parsing to
App
building (ie will now run inApp::debug_assert
)
derive
- Documentation fixes
v3.0.6
Fixes
derive
- Don't assume user does
use clap::ArgEnum
(#3277) - Documentation fixes
v3.0.5
Fixes
- Provide hack to workaround inability to detect external subcommands aliasing when escaped (#3264)
docs:
- Cleaned up code blocks in tutorials (#3261)
- Clean up quotes in
ArgMatches
asserts - List correct replacement for deprecated
Parser::from_clap
(#3257)
v3.0.4
Features
- For very limited cases, like
cargo
, exposeArgMatches::is_valid_arg
to avoid panicing on undefined arguments
v3.0.3
Fixes
- Specify cause of debug assert failure
v3.0.2
Fixes
- Ignore
Last
when checking hyphen values (see #3249 for details) - Help catch bugs with
#[must_use]
v3.0.1
Features
- Added
ArgMatches::args_present()
to check if any args are present - Added
Error::kind()
as we work to deprecate direct member access forError
- Added
App::get_version
- Added
App::get_long_version
- Added
App::get_author
- Added
App::get_subcommand_help_heading
- Added
App::get_subcommand_value_name
- Added
App::get_after_help
- Added
App::get_after_long_help
Performance
- Misc binary size reductions
v3.0.0
Note: clap v3 has been in development for several years and has changed hands multiple times. Unfortunately, our changelog might be incomplete, whether in changes or their motivation.
Highlights
A special thanks to the maintainers, contributors, beta users, and sponsors who have helped along this journey, especially kbknapp.
StructOpt Integration
StructOpt provides a serde-like declarative approach to defining your parser. The main benefits we've seen so far from integrating are:
- Tighter feedback between the design of clap and the derives
- More universal traits. Crates exist for common CLI patterns
(example)
and we've re-designed the
StructOpt
traits so crates built on clap3 can be reused not just with other derives but also people using the builder API. People can even hand implement these so people using the builder API won't have the pay the cost for derives.
Custom Help Headings
Previously, clap automatically grouped arguments in the help as either
ARGS
, FLAGS
, OPTIONS
, and SUBCOMMANDS
.
You can now override the default group with Arg::help_heading
and
App::subcommand_help_heading
. To apply a heading to a series of arguments,
you can set App::help_heading
.
Deprecations
While a lot of deprecations have been added to clean up the API (overloaded
meaning of Arg::multiple
) or make things more consistent, some particular
highlights are:
-
clap_app!
has been deprecated in favor of the builder API witharg!
(clap-rs/clap#2835) -
Arg::from_usage
has been deprecated in favor ofarg!
(clap-rs/clap#3087) - The YAML API has been deprecated in favor the builder or derive APIs (clap-rs/clap#3087)
Migrating
From clap v2
- Add CLI tests,
-h
and--help
output at a minimum (recommendation: trycmd for snapshot testing) - Update your dependency
-
If you use
no-default-features
: add thestd
feature
-
If you use
- Resolve compiler errors
- Resolve behavior changes
- Refactor your
App
creation to a function and add a test similar to the one below, resolving any of its assertions - Look over the "subtle changes" under BREAKING CHANGES
-
If using builder: test your application under various circumstances to see if
ArgMatches
asserts regardingAllowInvalidUtf8
.
- Refactor your
- At your leisure: resolve deprecation notices
Example test:
fn app() -> clap::App<'static> {
...
}
#[test]
fn verify_app() {
app().debug_assert();
}
From structopt 0.3.25
- Add CLI tests,
-h
and--help
output at a minimum (recommendation: trycmd for snapshot testing) - Replace your dependency from
structopt = "..."
toclap = { version = "3.0", features = ["derive"] }
-
If you use
no-default-features
: add thestd
feature
-
If you use
- Resolve compiler errors, including
- Update your
use
statements fromstructopt
andstructopt::clap
toclap
- Update your
- Resolve behavior changes
- Add a test similar to the one below, resolving any of its assertions
- Look over the "subtle changes" under BREAKING CHANGES
- At your leisure: resolve deprecation notices
Example test:
#[derive(clap::StructOpt)]
struct Args {
...
}
#[test]
fn verify_app() {
use clap::IntoApp;
Args::into_app().debug_assert()
}
From clap v3.0.0-beta.5
- Add CLI tests,
-h
and--help
output at a minimum (recommendation: trycmd for snapshot testing) - Update your dependency
- Add in
derive
,env
,cargo
, orunicode
feature flags as needed
- Add in
- Resolve compiler errors
-
If you use
yaml
,clap_app!
, or usage parser: revert any changes you made for clap3 - Change
Arg::about
Arg::long_about
back tohelp
andlong_help
and changePossibleValue::about
tohelp
(clap-rs/clap#3075) - Change
AppSettings::HelpRequired
toAppSettings::HelpExpected
- Change
PossibleValue::hidden
toPossibleValue::hide
- Change
App::subcommand_placeholder
toApp::subcommand_value_name
/App::subcommand_help_heading
-
If you use
- Resolve behavior changes
- Add the above listed test appropriate for your application and resolve any problems it reports
-
If using
derive
: see the structopt breaking changes section forVec
changes -
If using builder: test your application under various circumstances to see if
ArgMatches
asserts regardingAllowInvalidUtf8
.
- At your leisure: resolve deprecation notices
BREAKING CHANGES
From clap 2
Subtle changes (i.e. compiler won't catch):
-
AppSettings::UnifiedHelpMessage
is now default behaviour-
{flags}
and{unified}
will assert if present inApp::help_template
- See clap-rs/clap#2807
-
-
AppSettings::EnableColoredHelp
is now the default behavior but can be opted-out withAppSettings::DisableColoredHelp
(clap-rs/clap#2806) -
App::override_usage
no longer implies a leading\t
, allowing multi lined usages -
Arg::require_equals
no longer impliesArgSettings::ForbidEmptyValues
(#2233) -
Arg::require_delimiter
no longer impliesArgSettings::TakesValue
andArgSettings::UseValueDelimiter
(#2233) -
Arg::env
,Arg::env_os
,Arg::last
,Arg::require_equals
,Arg::allow_hyphen_values
,Arg::hide_possible_values
,Arg::hide_default_value
,Arg::hide_env_values
,Arg::case_insensitive
andArg::multiple_values
no longer implyArgSettings::TakesValue
(#2233) -
ArgMatches::is_present
no longer checks subcommand names - Some env variable values are now considered false for flags, not just "not-present" (clap-rs/clap#2539)
- Changed
...
s meaning in usage parser. Before, it always meantmultiple
which is still true for--option [val]...
. Now[name]... --option [val]
results inArgSettings::MultipleOccurrences
. - Usage exit code changed from
1
to2
(clap-rs/clap#1327) - Reject
--foo=bar
whentakes_value(false)
(clap-rs/clap#1543) - No longer accept an arbitrary number of
-
for long arguments (-----long
)
Easier to catch changes:
- When using
no-default-features
, you now have to specify thestd
feature (reserved for future work) - Gated env support behind
env
feature flag- Impacts
Arg::env
,Arg::env_os
,Arg::hide_env_values
,ArgSettings::HideEnvValues
- See clap-rs/clap#2694
- Impacts
- Gated crate information behind
cargo
feature flag- Impacts
crate_name!
,crate_version!
,crate_authors!
,crate_description!
,app_from_crate!
- Impacts
-
AppSettings::StrictUtf8
is now default behaviour and asserts ifAppSettings::AllowInvalidUtf8ForExternalSubcommands
andArgSettings::AllowInvalidUtf8
andArgMatches::value_of_os
aren't used together-
AppSettings::AllowInvalidUtf8
has been removed - clap-rs/clap#751
-
-
Arg::short
andArg::value_delimiter
now take achar
instead of a&str
-
ArgMatches
panics on unknown arguments - Removed
VersionlessSubcommands
, making it the default (see clap-rs/clap#2812) - Completion generation has been split out into clap_complete.
- Removed
ArgSettings::EmptyValues
in favor ofArgSettings::ForbidEmptyValues
- Validator signatures have been loosed:
-
Arg::validator
now takes first argument asFn(&str) -> Result<O, E: ToString>
instead ofFn(String) -> Result<(), String>
-
Arg::validator_os
now takes first argument asFn(&OsStr) -> Result<O, OsString>
instead ofFn(&OsStr) -> Result<(), OsString>
-
-
Arg::value_name
now sets, rather than appends (see clap-rs/clap#2634) - Upgrade
yaml-rust
from 0.3 to 0.4 - Replaced
ArgGroup::from(BTreeMap)
toArgGroup::from(yaml)
- Replaced
ArgMatches::usage
withApp::generate_usage
- Replaced
Arg::settings
withArg::setting(Setting1 | Setting2)
-
App
andArg
now need only one lifetime - Removed deprecated
App::with_defaults
, replaced withapp_from_crate
- Removed deprecated
AppSettings::PropagateGlobalValuesDown
(now the default) - Some
App
functions, likeApp::write_help
now take&mut self
instead of&self
-
Error::message
is now private, useError::to_string
-
Arg::default_value_if
,Arg::default_value_if_os
,Arg::default_value_ifs
,Arg::default_value_ifs_os
now takes the default value parameter as an option (clap-rs/clap#1406) - Changed
App::print_help
&App::print_long_help
to now returnstd::io::Result
- Changed
App::write_help
&App::write_long_help
to now returnstd::io::Result
- Changed
Arg::index
,Arg::number_of_values
,Arg::min_values
,Arg::max_values
to takingusize
instead of u64 - Changed
Error::info
to typeVec<String>
instead ofOption<Vec<String>>
- Changed
ArgMatches::subcommand
to now returnOption<(&str, &ArgMatches)>
- Renamed
ErrorKind::MissingArgumentOrSubcommand
toErrorKind::DisplayHelpOnMissingArgumentOrSubcommand
- Renamed
ErrorKind::HelpDisplayed
toErrorKind::DisplayHelp
- Renamed
ErrorKind::VersionDisplayed
toErrorKind::DisplayVersion
- Added
#[non_exhaustive]
toclap::{ValueHint, ErrorKind, AppSettings, ArgSettings}
(clap-rs/clap#3167)
From structopt 0.3.25
- By default, the
App
isn't initialized with crate information anymore. Now opt-in via#[clap(author)]
,#[clap(about)]
,#[clap(version)]
(clap-rs/clap#3034) -
#[clap(default_value)]
is replaced with#[clap(default_value_t)]
(clap-rs/clap#1694) - Subcommands nested under subcommands now needs a
#[clap(subcommand)]
attribute (clap-rs/clap#2587) -
Vec<_>
andOption<Vec<_>>
have changed frommultiple
tomultiple_occurrences
On top of the clap 2 changes
Performance
From clap 2
- Split out non-default
unicode
feature flag for faster builds and smaller binaries for ASCII-only CLIs. - Split out non-default
env
feature flag for faster builds and smaller binaries.
Features
From clap 2
-
Integration of
structopt::StructOpt
viaclap::Parser
(requiresderive
feature flag) -
Custom help headings
-
App::help_heading
(apply to all future args) -
Arg::help_heading
(apply to current arg) -
App::subcommand_help_heading
along withApp::subcommand_value_name
(apply to subcommands) - See clap-rs/clap#805
-
AppSettings::UnifiedHelpMessage
is now default behaviour (clap-rs/clap#2807)
-
-
Deriving of
ArgEnum
for generatingArg::possible_values
(requiresderive
feature flag) -
Disable built-in help/version behavior with
AppSettings::NoAutoHelp
andAppSettings::NoAutoVersion
-
Change an existing arg with new builder method
mut_arg
(particularly helpful for--help
and--version
) -
Provide extra context in long help messages (
--help
) withbefore_long_help
andafter_long_help
(clap-rs/clap#1903) -
Detect missing help descriptions via debug asserts by enabling
AppSettings::HelpExpected
-
Aliases for short flags (clap-rs/clap#1896)
-
Validate UTF-8 values, rather than panicing during
ArgMatches::value_of
thanks toAppSettings::AllowInvalidUtf8ForExternalSubcommands
andArgSettings::AllowInvalidUtf8
- Debug builds will assert when the
ArgMatches
calls do not match the UTF-8 setting. - See clap-rs/clap#751
- Debug builds will assert when the
-
clap::PossibleValue
to allow- Hiding (clap-rs/clap#2756)
- Completion help for possible values for args (clap-rs/clap#2731)
-
Allow arguments to conflict with all others via
Arg::exclusive
(clap-rs/clap#1583) -
Validate arguments with a regex (required
regex
feature flag)- See clap-rs/clap
-
Arg::default_missing_value
for cases like--color[=<WHEN>]
(clap-rs/clap#1587) -
clap::App::color
/clap::ColorChoice
to specify color setting for the app -
Custom error reporting with
App::error
-
App::debug_assert
test helper -
Replace
Arg::multiple(bool)
withArg::multiple_values
/Arg::multiple_occurrences
- Positionals can be either
-
Added support for flag subcommands like pacman (clap-rs/clap#1361)
-
Partial parsing via
AppSettings::IgnoreErrors
(clap-rs/clap#1880) -
Enable
cmd help
to print long help (--help
instead of-h
) withAppSettings::UseLongFormatForHelpSubcommand
(clap-rs/clap#2435) -
Allow long arg abbreviations like we do with subcommands via
AppSettings::InferLongArgs
(clap-rs/clap#2435) -
Detect subcommands among positional arguments with
AppSettings::SubcommandPrecedenceOverArg
-
Give completion scripts hints with
Arg::value_hint
(clap-rs/clap#1793) -
Allow unsetting defaults with
-
Arg::default_value_if
,Arg::default_value_if_os
,Arg::default_value_ifs
,Arg::default_value_ifs_os
(clap-rs/clap#1406) -
Interpret some env variable values as
false
for flags, in addition to "not-present" (clap-rs/clap#2539)-
n
,no
,f
,false
,off
,0
-
-
Added
arg!
macro for creating anArg
from a compile-time usage parser -
(Experimental) Busybox-like multi-call support
- See
AppSettings::Multicall
behindunstable-multicall
feature flag - See clap-rs/clap#1120
- See
-
(Experimental) Alias an argument to anything group of arguments
- See
App::replace
behindunstable-replace
feature flag - See clap-rs#1603
- See
-
(Experimental) Grouping of multiple values within multiple occurrences
- See
ArgMatches::grouped_values_of
behindunstable-grouped
feature flag - See clap-rs/clap#1026
- See
From structopt 0.3.25
- Allow defaulting with native types via new
default_value_t [= <expr>]
attribute (clap-rs/clap#1694) - New
update
API - New
arg_enum
attribute for integrating withArgEnum
trait
On top of the clap 2 changes
Fixes
From clap 2
- Correctly handle colored output on Windows
- Only generate version flags when
App::version
,App::long_version
are set (see clap-rs/clap#2812) - General completion script improvements
- Limited default help text wrapping to 100 when
wrap_help
feature is not enabled - Be more specific than
Arg::multiple
withArg::multiple_values
andArg::multiple_occurrences
-
app_from_crate!
defaults to separating multiple authors with", "
- Ensure all examples work
-
IgnoreCase
is now unicode aware (requiresunicode
feature flag) - Always respect
ColorChoice::Never
, even if that means we skip colors in some cases -
ArgMatches
panics on unknown arguments - Gracefully handle empty
authors
field inCargo.toml
withapp_from_crate
- Do not show
--help
incmd help
withDisableHelpFlag
(clap-rs/clap#3169) - Do not show
--help
incmd help help
that doesn't work (clap-rs/clap#3169)
From structopt 0.3.25
- Support
SubcommandsNegateReqs
by allowing requiredOption<_>
s (clap-rs/clap#2255) - Infer
AllowInvalidUtf8
based on parser (clap-rs/clap#751) - Gracefully handle empty
authors
field inCargo.toml
- Don't panic with
default_value_os
but treat it likedefault_value
(clap-rs/clap#3031) - When using
flatten
andsubcommand
, ensure our doc comment always overrides the nested container's doc comment, whether it has onlyabout
orabout
andlong_about
(clap-rs/clap#3175)
On top of the clap 2 changes
Minimum Required Rust
- As of this release,
clap
requiresrustc 1.54.0
or greater.
v2.34.0
- Updates to Rust 2018 edition and bumps the MSRV to Rust 1.46
v2.33.4
Bug Fixes
-
prevents
panic
: swallows broken pipe errors on error output (7a729bc4)
v2.33.3
Improvements
- Suppress deprecation warnings when using
crate_*
macros.
v2.33.2
Documentation
- Fixed links to
2.x
examples. Now they point to the right place.
v2.33.1
Bug Fixes
Documentation
- fixes versions referenced in the README (d307466a)
-
README.md:
- cuts down the number of examples to reduce confusion (6e508ee0)
Improvements
Minimum Required Rust
- As of this release,
clap
requiresrustc 1.36.0
or greater.
v2.33.0
New Sponsor
- Stephen Oats is now a sponsor \o/ (823457c0)
- SPONSORS.md: fixes Josh Triplett's info in the sponsor document (24cb5740)
Features
- Completions: adds completion support for Elvish. (e9d0562a)
- There is a new setting to disable automatic building of
--help
and-h
flags (AppSettings::DisableAutoHelp
)
Improvements
- arg_matches.rs: add Debug implementations (47192b7a)
- macros: Support shorthand syntax for ArgGroups (df9095e7)
Documentation
Bug Fixes
- add debug assertion for missing args in subcommand ArgGroup (2699d9e5)
- Restore compat with Rust 1.21 (6b263de1)
- Don't mention unused subcommands (ef92e2b6)
-
OsValues: Add
ExactSizeIterator
implementation (356c69e5) - arg_enum!:
- completions: improve correctness of completions when whitespace is involved (5a08ff29)
- help message: Unconditionally uses long description for subcommands (6acc8b6a, closes #897)
- macros: fixes broken pattern which prevented calling multi-argument Arg methods (9e7a352e)
- parser: Better interaction between AllowExternalSubcommands and SubcommandRequired (9601c95a)
Minimum Required Rust
- As of this release,
clap
requiresrustc 1.31.0
or greater.
v2.32.0
Minimum Required Rust
- As of this release,
clap
requiresrustc 1.21.0
or greater.
Features
- Completions: adds completion support for Elvish. (e9d0562a)
Improvements
- macros: Support shorthand syntax for ArgGroups (df9095e7)
Bug Fixes
-
OsValues: Add
ExactSizeIterator
implementation (356c69e5) - arg_enum!: Invalid expansions of some trailing-comma patterns (7023184f)
- help message: Unconditionally uses long description for subcommands (6acc8b6a, closes #897)
Documentation
- Refer to macOS rather than OSX. (ab0d767f)
v2.31.2
Bug Fixes
- Fish Completions: fixes a bug that only allowed a single completion in in Fish Shell (e8774a8, closes #1212)
- AllowExternalSubcommands: fixes a bug where external subcommands would be blocked by a similarly named subcommand (suggestions were getting in the way). (a410e85)
Documentation
- Fixes some typos in the
README.md
(c8e685d7)
v2.31.1
Improvements
- AllowMissingPositional: improves the ability of AllowMissingPositional to allow 'skipping' to the last positional arg with '--' (df20e6e2)
v2.31.0
Features
- Arg Indices: adds the ability to query argument value indices (f58d0576)
- Indices: implements an Indices<Item=&usize> iterator (1e67be44)
-
Raw Args adds a convenience function to
Arg
that allows implying all ofArg::last
Arg::allow_hyphen_values
andArg::multiple(true)
(66a78f29)
Documentation
- Fix some typos and markdown issues. (935ba0dd)
- Arg Indices: adds the documentation for the arg index querying methods (50bc0047)
- CONTRIBUTING.md: fix url to clippy upstream repo to point to https://github.com/rust-lang-nursery/rust-clippy instead of https://github.com/Manishearth/rust-clippy (42407d7f)
- Values: improves the docs example of the Values iterator (74075d65)
- Updates readme to hint that the
wrap_help
feature is a thing (fc7ab227)
Improvements
- Cargo.toml: use codegen-units = 1 in release and bench profiles (19f425ea)
- Adds WASM support (clap now compiles on WASM!) (689949e5)
- Uses the short help tool-tip for PowerShell completion scripts (ecda22ce)
v2.30.0
Bug Fixes
-
YAML: Adds a missing conversion from
Arg::last
when instantiating from a YAML file (aab77c81a5, closes #1160)
Improvements
-
Bash Completions: instead of completing a generic option name, all bash completions fall back to file completions UNLESS
Arg::possible_values
was used (872f02ae) -
Deps: No longer needlessly compiles
ansi_term
on Windows since its not used (b57ee946, closes #1155) -
Help Message: changes the
[values: foo bar baz]
array to[possible values: foo bar baz]
for consistency with the API (414707e4e97, closes #1160)
v2.29.4
Bug Fixes
- Overrides Self: fixes a bug where options with multiple values couldn't ever have multiple values (d95907cf)
v2.29.3
Improvements
Bug Fixes
- Requirements: fixes an issue where conflicting args would still show up as required (e06cefac, closes #1158)
- Fixes a bug which disallows proper nesting of
--
(73993fe, closes #1161)
New Settings
- AllArgsOverrideSelf: adds a new convenience setting to allow all args to override themselves (4670325d)
v2.29.2
Features
- completions/zsh.rs:
Bug Fixes
- completions/zsh.rs:
- completions/zsh.zsh: Remove redundant code from output (0e185b92, closes #1142)
2.29.1 (2018-01-09)
Documentation
Performance
- further debloating by removing generics from error cases (eb8d919e)
- debloats clap by deduplicating logic and refactors (03e413d7)
Bug Fixes
- fixes the ripgrep benchmark by adding a value to a flag that expects it (d26ab2b9)
- bash completion: Change the bash completion script code generation to support hyphens. (ba7f1d18)
- completions/zsh.rs: Fix completion of long option values (46365cf8)
v2.29.1
Documentation
Performance
- further debloating by removing generics from error cases (eb8d919e)
- debloats clap by deduplicating logic and refactors (03e413d7)
Bug Fixes
- fixes the ripgrep benchmark by adding a value to a flag that expects it (d26ab2b9)
- bash completion: Change the bash completion script code generation to support hyphens. (ba7f1d18)
- completions/zsh.rs: Fix completion of long option values (46365cf8)
v2.29.0
API Additions
- Arg: adds Arg::hide_env_values(bool) which allows one to hide any current env values and display only the key in help messages (fb41d062)
v2.28.0
The minimum required Rust is now 1.20. This was done to start using bitflags 1.0 and having >1.0 deps is a very good thing!
Documentation
- changes the demo version to 2.28 to stay in sync (ce6ca492)
- Fix URL path to github hosted files (ce72aada, closes #1106)
- fix typo (002b07fc)
- README.md: updates the readme and pulls out some redundant sections (db6caf86)
Improvements
- adds '[SUBCOMMAND]' to usage strings with only AppSettings::AllowExternalSubcommands is used with no other subcommands (e78bb757, closes #1093)
API Additions
- Adds Arg::case_insensitive(bool) which allows matching Arg::possible_values without worrying about ASCII case (1fec268e, closes #1118)
- Adds the traits to be used with the clap-derive crate to be able to use Custom Derive (6f4c3412)
Bug Fixes
- Fixes a regression where --help couldn't be overridden (a283d69f, closes #1112)
- fixes a bug that allowed options to pass parsing when no value was provided (2fb75821, closes #1105)
- ignore PropagateGlobalValuesDown deprecation warning (f61ce3f5, closes #1086)
Deps
- Updates
bitflags
to 1.0
v2.27.1
Bug Fixes
- Adds
term_size
as an optional dependency (with featurewrap_help
) to fix compile bug
v2.27.0
** This release raises the minimum required version of Rust to 1.18 **
** This release also contains a very minor breaking change to fix a bug **
The only CLIs affected will be those using unrestrained multiple values and subcommands where the subcommand name can coincide with one of the multiple values.
See the commit 0c223f54 for full details.
Bug Fixes
- Values from global args are now propagated UP and DOWN!
- fixes a bug where using AppSettings::AllowHyphenValues would allow invalid arguments even when there is no way for them to be valid (77ed4684, closes #1066)
- when an argument requires a value and that value happens to match a subcommand name, its parsed as a value (0c223f54, closes #1031, breaks #, #)
- fixes a bug that prevented number_of_values and default_values to be used together (5eb342a9, closes #1050, #1056)
- fixes a bug that didn't allow args with default values to have conflicts (58b5b4be, closes #1071)
- fixes a panic when using global args and calling App::get_matches_from_safe_borrow multiple times (d86ec797, closes #1076)
- fixes issues and potential regressions with global args values not being propagated properly or at all (a43f9dd4, closes #1010, #1061, #978)
- fixes a bug where default values are not applied if the option supports zero values (9c248cbf, closes #1047)
Documentation
- adds additional blurbs about using multiples with subcommands (03455b77)
- updates the docs to reflect changes to global args and that global args values can now be propagated back up the stack (ead076f0)
- add html_root_url attribute (e67a061b)
- sync README version numbers with crate version (5536361b)
Improvements
- args that have require_delimiter(true) is now reflected in help and usage strings (dce61699, closes #1052)
- if all subcommands are hidden, the subcommands section of the help message is no longer displayed (4ae7b046, closes #1046)
Breaking Changes
- when an argument requires a value and that value happens to match a subcommand name, its parsed as a value (0c223f54, closes #1031, breaks #, #)
Deprecations
- AppSettings::PropagateGlobalValuesDown: this setting is no longer required to propagate values down or up (2bb5ddce)
v2.26.2
Improvements
- if all subcommands are hidden, the subcommands section of the help message is no longer displayed (4ae7b046, closes #1046)
Bug Fixes
- fixes a bug where default values are not applied if the option supports zero values (9c248cbf, closes #1047)
v2.26.1
Bug Fixes
- fixes using require_equals(true) and min_values(0) together (10ae208f, closes #1044)
- escape special characters in zsh and fish completions (87e019fc)
- avoid panic generating default help msg if term width set to 0 due to bug in textwrap 0.7.0 (b3eadb0d)
- Change
who's
->whose
(53c1ffe8) - adds a debug assertion to ensure all args added to groups actually exist (7ad123e2, closes #917)
- fixes a bug where args that allow values to start with a hyphen couldn't contain a double hyphen -- as a value (ab2f4c9e, closes #960)
- fixes a bug where positional argument help text is misaligned (54c16836)
- Help Message: fixes long_about not being usable (a8257ea0, closes #1043)
- Suggestions: output for flag after subcommand (434ea5ba)
v2.26.0
Minimum version of Rust is now v1.13.0 (Stable)
Improvements
- bumps unicode-segmentation to v1.2 (cd7b40a2)
Performance
- update textwrap to version 0.7.0 (c2d4e637)
v2.25.1
Improvements
- impl Default for Values + OsValues for any lifetime. (fb7d6231f1)
Documentation
- Various documentation typos and grammar fixes
v2.25.0
Features
- use textwrap crate for wrapping help texts (b93870c1)
Improvements
- Suggestions: suggests to use flag after subcommand when applicable (2671ca72)
- Bumps bitflags crate to v0.9
Documentation
- Change
who's
->whose
(53c1ffe8)
Documentation
- App::template: adds details about the necessity to use AppSettings::UnifiedHelpMessage when using {unified} tags in the help template (cbea3d5a, closes #949)
- Arg::allow_hyphen_values: updates the docs to include warnings for allow_hyphen_values and multiple(true) used together (f9b0d657)
- README.md:
- clap_app!: adds using the @group specifier to the macro docs (826048cb, closes #932)
v2.24.2
Bug Fixes
- adds a debug assertion to ensure all args added to groups actually exist (14f6b8f3, closes #917)
- fixes a bug where args that allow values to start with a hyphen couldn't contain a double hyphen -- as a value (ebf73a09, closes #960)
- fixes a bug where positional argument help text is misaligned (54c16836)
Documentation
- App::template: adds details about the necessity to use AppSettings::UnifiedHelpMessage when using {unified} tags in the help template (cf569438, closes #949)
- Arg::allow_hyphen_values: updates the docs to include warnings for allow_hyphen_values and multiple(true) used together (ded5a2f1)
- clap_app!: adds using the @group specifier to the macro docs (fe85fcb1, closes #932)
v2.24.1
v2.24.0 (2017-05-07)
Bug Fixes
- fixes a bug where args with last(true) and required(true) set were not being printed in the usage string (3ac533fe, closes #944)
- fixes a bug that was printing the arg name, instead of value name when Arg::last(true) was used (e1fe8ac3, closes #940)
- fixes a bug where flags were parsed as flags AND positional values when specific combinations of settings were used (20f83292, closes #946)
v2.24.0 (2017-05-05)
Documentation
- README.md: fix some typos (fa34deac)
API Additions
-
Arg: add
default_value_os
(d5ef8955) - arg_matches.rs: Added a Default implementation for Values and OsValues iterators. (0a4384e3)
v2.23.2 (2017-04-19)
Bug Fixes
- PowerShell Completions: fixes a bug where powershells completions cant be used if no subcommands are defined (a8bce558, closes #931)
Improvements
- bumps term_size to take advantage of better terminal dimension handling (e05100b7)
- PowerShell Completions: massively dedups subcommand names in the generate script to make smaller scripts that are still functionally equiv (85b0e1cc)
Documentation
- Fix a typo the minimum rust version required (71dabba3)
v2.24.0
Bug Fixes
- fixes a bug where args with last(true) and required(true) set were not being printed in the usage string (3ac533fe, closes #944)
- fixes a bug that was printing the arg name, instead of value name when Arg::last(true) was used (e1fe8ac3, closes #940)
- fixes a bug where flags were parsed as flags AND positional values when specific combinations of settings were used (20f83292, closes #946)
v2.23.2
Bug Fixes
- PowerShell Completions: fixes a bug where powershells completions cant be used if no subcommands are defined (a8bce558, closes #931)
Improvements
- bumps term_size to take advantage of better terminal dimension handling (e05100b7)
- PowerShell Completions: massively dedups subcommand names in the generate script to make smaller scripts that are still functionally equiv (85b0e1cc)
Documentation
- Fix a typo the minimum rust version required (71dabba3)
v2.23.1
Bug Fixes
- fixes a missing newline character in the autogenerated help and version messages in some instances (5ae9007d)
v2.23.0
API Additions
App::long_about
App::long_version
App::print_long_help
App::write_long_help
App::print_long_version
App::write_long_version
Arg::long_help
Features
- allows distinguishing between short and long version messages (-V/short or --version/long) (59272b06)
- allows distinguishing between short and long help with subcommands in the same manner as args (6b371891)
- allows specifying a short help vs a long help (i.e. varying levels of detail depending on if -h or --help was used) (ef1b24c3)
- clap_app!: adds support for arg names with hyphens similar to longs with hyphens (f7a88779, closes #869)
Bug Fixes
- fixes a bug that wasn't allowing help and version to be properly overridden (8b2ceb83, closes #922)
Documentation
-
clap_app!: documents the
--("some-arg")
method for using args with hyphens inside them (bc08ef3e, closes #919)
v2.22.2
Bug Fixes
- Custom Usage Strings: fixes the usage string regression when using help templates (0e4fd96d)
v2.22.1
Bug Fixes
- usage: fixes a big regression with custom usage strings (2c41caba)
v2.22.0
API Additions
- App::name: adds the ability to change the name of the App instance after creation (d49e8292, closes #908)
- Arg::hide_default_value: adds ability to hide the default value of an argument from the help string (89e6ea86, closes #902)
v2.21.3
Bug Fixes
- yaml: adds support for loading author info from yaml (e04c390c)
v2.21.2
Improvements
- add fish subcommand help support (f8f68cf8)
- options that use
require_equals(true)
now display the equals sign in help messages, usage strings, and errors" (c8eb0384, closes #903)
Bug Fixes
- setting the max term width now correctly propagates down through child subcommands
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.