This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| clap | dependencies | minor | 3.0.0-beta.2
-> 3.2.23
|
Release Notes
clap-rs/clap
Compare Source
[3.2.23] - 2022-10-24
Fixes
Compare Source
[3.2.22] - 2022-09-16
Fixes
- Unify dependencies on
terminal_size
to the 0.2 release
Compare Source
[3.2.21] - 2022-09-12
Features
TypedValueParser::map
to allow reusing existing value parsers for other purposes
Compare Source
[3.2.20] - 2022-09-02
Features
ArgMatches::get_count
help for ArgAction::Count
ArgMatches::get_flag
help for ArgAction::SetTrue
/ ArgAction::SetFalse
Compare Source
[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
Compare Source
Fixes
- (help)
Command::print_help
now respects Command::colored_help
- (derive) Improved error messages
Compare Source
Fixes
- (derive) Expose
#[clap(id = ...)]
attribute to match Arg's latest API
Compare Source
Fixes
- Ensure required arguments appear in errors when they are also members of a group (#4004)
Compare Source
Features
- (derive) New
default_values_t
and default_values_os_t
attributes
Compare Source
Fixes
- A
multiple_values
positional followed by another positional now works with multiple flags
Compare Source
Documentation
- Pulled in tutorials, cookbook, and derive reference into rustdoc
Compare Source
Fixes
- Allow an arg to declare a conflict with a group
Compare Source
Features
- Added
Arg::get_all_short_aliaes
and Arg::get_all_aliases
Compare Source
Fixes
- Loosen lifetime on
Command::mut_subcommand
Compare Source
Features
- Added
Command::mut_subcommand
to mirror Command::mut_arg
Compare Source
Fixes
- Global arguments should override env-sourced arguments
Compare Source
Fixes
- Don't panic when parsing
--=
Compare Source
Fixes
- (derive) Fix regression with
#[clap(default_value_os_t ...)]
introduced in v3.2.3
Compare Source
Fixes
- (derive) Provide more clearer deprecation messages for
#[clap(parse)]
attribute (#3832)
Compare Source
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
Compare Source
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)
Compare Source
Fixes
- (help)
Command::print_help
now respects Command::colored_help
- (derive) Improved error messages
Compare Source
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}
to clap::builder::{PossibleValue, ValueHint}
clap::{Indices, OsValues, ValueSource, Values}
to clap::parser::{Indices, OsValues, ValueSource, Values}
clap::ArgEnum
to clap::ValueEnum
(#3799)
Replaced
Arg::allow_invalid_utf8
with Arg::value_parser(value_parser!(PathBuf))
(#3753)
Arg::validator
/ Arg::validator_os
with Arg::value_parser
(#3753)
Arg::validator_regex
with users providing their own builder::TypedValueParser
(#3756)
Arg::forbid_empty_values
with builder::NonEmptyStringValueParser
/ builder::PathBufValueParser
(#3753)
Arg::possible_values
with Arg::value_parser([...])
, builder::PossibleValuesParser
, or builder::EnumValueParser
(#3753)
Arg::max_occurrences
with arg.action(ArgAction::Count).value_parser(value_parser!(u8).range(..N))
for flags (#3797)
Arg::multiple_occurrences
with ArgAction::Append
or ArgAction::Count
though positionals will need Arg::multiple_values
(#3772, #3797)
Command::args_override_self
with ArgAction::Set
(#2627, #3797)
AppSettings::NoAutoVersion
with ArgAction
or Command::disable_version_flag
(#3800)
AppSettings::NoHelpVersion
with ArgAction
or Command::disable_help_flag
/ Command::disable_help_subcommand
(#3800)
ArgMatches::{value_of, value_of_os, value_of_os_lossy, value_of_t}
with ArgMatches::{get_one,remove_one}
(#3753)
ArgMatches::{values_of, values_of_os, values_of_os_lossy, values_of_t}
with ArgMatches::{get_many,remove_many}
(#3753)
ArgMatches::is_valid_arg
with ArgMatches::{try_get_one,try_get_many}
(#3753)
ArgMatches::occurrences_of
with ArgMatches::value_source
or ArgAction::Count
(#3797)
ArgMatches::is_present
with ArgMatches::contains_id
or ArgAction::SetTrue
(#3797)
ArgAction::StoreValue
with ArgAction::Set
or ArgAction::Append
(#3797)
ArgAction::IncOccurrences
with ArgAction::SetTrue
or ArgAction::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, the unstable-v4
feature changes the default
away from parse
to action
/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 be u8
(#3794)
- For
#[clap(parse(from_os_str)]
for PathBuf
, replace it with
#[clap(value_parser)]
(as mentioned earlier this will call
value_parser!(PathBuf)
which will auto-select the right ValueParser
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 = ...)]
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 the ValueParserFactory
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 underlying OsStr
s
PathBuf
value parsers imply ValueHint::AnyPath
for completions (#3732)
- Explicit control over parsing via
Arg::action
(#3774)
ArgAction::StoreValue
: existing takes_value(true)
behavior
ArgAction::IncOccurrences
: existing takes_value(false)
behavior
ArgAction::Help
: existing --help
behavior
ArgAction::Version
: existing --version
behavior
ArgAction::Set
: Overwrite existing values (like Arg::multiple_occurrences
mixed with Command::args_override_self
) (#3777)
ArgAction::Append
: like Arg::multiple_occurrences
(#3777)
ArgAction::SetTrue
: Treat --flag
as --flag=true
(#3775)
- Implies
Arg::default_value("false")
(#3786)
- Parses
Arg::env
via Arg::value_parser
ArgAction::SetFalse
: Treat --flag
as --flag=false
(#3775)
- Implies
Arg::default_value("true")
(#3786)
- Parses
Arg::env
via Arg::value_parser
ArgAction::Count
: Treat --flag --flag --flag
as --flag=1 --flag=2 --flag=3
(#3775)
- Implies
Arg::default_value("0")
(#3786)
- Parses
Arg::env
via Arg::value_parser
- (derive) Opt-in to new
Arg::value_parser
/ Arg::action
with either #[clap(value_parser)]
(#3589, #3742) / #[clap(action)]
attributes (#3794)
- Default
ValueParser
is determined by value_parser!
(#3199, #3496)
- Default
ArgAction
is determine by a hard-coded lookup on the type (#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 new get_{one,many}
API
Fixes
- Don't correct argument id in
default_value_ifs_os
(#3815)
parser
- Set
ArgMatches::value_source
and ArgMatches::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)
Compare Source
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 enough value_names
are supplied
gated behind unstable-v4
- Verify
required
is not used with conditional required settings (#3660)
- Disallow more
value_names
than number_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
as verbatim
casing (#3282)
Compare Source
Fixes
- Allow value names for
arg!
macro to have dashes when quoted, like longs
Compare Source
Fixes
- (parser)
Arg::exclusive
overrides Arg::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 than Command::bin_name
Compare Source
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
Compare Source
Fixes
- Panic when calling
Command::build
with a required positional argument nested several layers in subcommands
Compare Source
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 with debug
feature enabled
Compare Source
Fixes
- Regression in 3.1.11 where the (output) streams were crossed
Compare Source
Fixes
- Implied conflicts override
Arg::required
, making the behavior consistent with how we calculate conflicts for error reporting
- Members of a mutually exclusive
ArgGroup
override Arg::required
, making the behavior consistent with how we calculate conflicts for error reporting
Arg::overrides_with
always override Arg::required
, not just when the parser processes an override
Compare Source
Features
- Expose
Command::build
for custom help generation or other command introspection needs
Compare Source
Fixes
- Pin the
clap_derive
version so a compatible version is always used with clap
Compare Source
Fixes
- Add
Debug
impls to more types
Compare Source
Fixes
- (derive) Abort, rather than ignore, when deriving
ArgEnum
with non-unit unskipped variants
Compare Source
Fixes
- Don't panic when validating delimited defaults (#3541)
- Make it clearer that
cargo
feature is needed
- Documentation improvements
Compare Source
Fixes
Compare Source
Features
- (help) Show
PossibleValue::help
in long help (--help
) (gated behind unstable-v4
) (#3312)
Compare Source
Fixes
- Don't panic when validating delimited defaults (#3514)
Compare Source
Fixes
- (derive) Allow other attribute with a subcommand that has subcommands
Documentation
- (examples) List example topics
- (derive) Clarify syntax and relation to builder API
Compare Source
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 enough value_names
are supplied
gated behind unstable-v4
- Verify
required
is not used with conditional required settings (#3660)
- Disallow more
value_names
than number_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
as verbatim
casing (#3282)
Compare Source
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
), deprecated clap::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 over clap::App
(#3089 in #3472)
clap::command!
is now preferred over clap::app_from_crate
(#3089 in #3474)
clap::CommandFactory::command
is now preferred over clap::IntoApp::into_app
(#3089 in #3473)
- (help)
help
subcommand shows long help like --help
, rather than short help (-h
), deprecated clap::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 over clap::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
and clap::ArgGroup::id
are now preferred over clap::Arg::name
and clap::ArgGroup::name
(#3335)
- (help)
clap::Command::next_help_heading
is now preferred over clap::Command::help_heading
(#1807, #1553)
- (error)
clap::error::ErrorKind
is now preferred over clap::ErrorKind
(#3395)
- (error)
clap::Error::kind()
is now preferred over clap::Error::kind
- (error)
clap::Error::context()
is now preferred over clap::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 implements Display
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 over SubcommandRequired
(#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)
Compare Source
Features
- Added
ArgMatches::args_present()
to check if any args are present
- Added
Error::kind()
as we work to deprecate direct member access for Error
- 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
Compare Source
Fixes
- Show optional flag values wrapped in
[]
Compare Source
Features
- (derive) Support for
default_value_os_t
Compare Source
Fixes
- Ensure conflicts work when they target a group with a default value
Compare Source
Fixes
- Resolve
panic!
from v3.0.8 when using global_setting(PropagateVersion)
.
Compare Source
Features
- Added
App::find_subcommand_mut
Compare Source
Fixes
- Respected
DisableColoredHelp
on cmd help help
- Provide a little more context when completing arguments for
cmd help
- Provide more context for some asserts
- Small documentation improvements
Compare Source
Fixes
- Shift more asserts from parsing to
App
building (ie will now run in App::debug_assert
)
derive
Compare Source
Fixes
derive
- Don't assume user does
use clap::ArgEnum
(#3277)
- Documentation fixes
Compare Source
Fixes
docs:
- Cleaned up code blocks in tutorials (#3261)
- Clean up quotes in
ArgMatches
asserts
- List correct replacement for deprecated
Parser::from_clap
(#3257)
Compare Source
Features
- For very limited cases, like
cargo
, expose ArgMatches::is_valid_arg
to avoid panicing on undefined arguments
Compare Source
Fixes
- Specify cause of debug assert failure
Compare Source
Fixes
- Ignore
Last
when checking hyphen values (see #3249 for details)
- Help catch bugs with
#[must_use]
Compare Source
Features
- Added
ArgMatches::args_present()
to check if any args are present
- Added
Error::kind()
as we work to deprecate direct member access for Error
- 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
Compare Source
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:
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 the std
feature
- 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 regarding AllowInvalidUtf8
.
- 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 = "..."
to clap = { version = "3.0", features = ["derive"] }
- If you use
no-default-features
: add the std
feature
- Resolve compiler errors, including
- Update your
use
statements from structopt
and structopt::clap
to clap
- 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
, or unicode
feature flags as needed
- 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 to help
and long_help
and change PossibleValue::about
to help
(clap-rs/clap#3075)
- Change
AppSettings::HelpRequired
to AppSettings::HelpExpected
- Change
PossibleValue::hidden
to PossibleValue::hide
- Change
App::subcommand_placeholder
to App::subcommand_value_name
/ App::subcommand_help_heading
- 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 for Vec
changes
- If using builder: test your application under various circumstances to see if
ArgMatches
asserts regarding AllowInvalidUtf8
.
- 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
AppSettings::EnableColoredHelp
is now the default behavior but can be
opted-out with AppSettings::DisableColoredHelp
(clap-rs/clap#2806)
App::override_usage
no longer implies a leading \t
, allowing multi lined usages
Arg::require_equals
no longer implies ArgSettings::ForbidEmptyValues
(#2233)
Arg::require_delimiter
no longer implies ArgSettings::TakesValue
and ArgSettings::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
and Arg::multiple_values
no longer imply ArgSettings::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 meant multiple
which is still true for --option [val]...
. Now [name]... --option [val]
results in ArgSettings::MultipleOccurrences
.
- Usage exit code changed from
1
to 2
(clap-rs/clap#1327)
- Reject
--foo=bar
when takes_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 the std
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
- Gated crate information behind
cargo
feature flag
- Impacts
crate_name!
, crate_version!
, crate_authors!
, crate_description!
, app_from_crate!
AppSettings::StrictUtf8
is now default behaviour and asserts if
AppSettings::AllowInvalidUtf8ForExternalSubcommands
and
ArgSettings::AllowInvalidUtf8
and ArgMatches::value_of_os
aren't used
together
Arg::short
and Arg::value_delimiter
now take a char
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 of ArgSettings::ForbidEmptyValues
- Validator signatures have been loosed:
Arg::validator
now takes first argument as Fn(&str) -> Result<O, E: ToString>
instead of
Fn(String) -> Result<(), String>
Arg::validator_os
now takes first argument as Fn(&OsStr) -> Result<O, OsString>
instead of
Fn(&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)
to ArgGroup::from(yaml)
- Replaced
ArgMatches::usage
with App::generate_usage
- Replaced
Arg::settings
with Arg::setting(Setting1 | Setting2)
App
and Arg
now need only one lifetime
- Removed deprecated
App::with_defaults
, replaced with app_from_crate
- Removed deprecated
AppSettings::PropagateGlobalValuesDown
(now the default)
- Some
App
functions, like App::write_help
now take &mut self
instead of &self
Error::message
is now private, use Error::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 return std::io::Result
- Changed
App::write_help
& App::write_long_help
to now return std::io::Result
- Changed
Arg::index
, Arg::number_of_values
, Arg::min_values
, Arg::max_values
to taking usize
instead of u64
- Changed
Error::info
to type Vec<String>
instead of Option<Vec<String>>
- Changed
ArgMatches::subcommand
to now return Option<(&str, &ArgMatches)>
- Renamed
ErrorKind::MissingArgumentOrSubcommand
to ErrorKind::DisplayHelpOnMissingArgumentOrSubcommand
- Renamed
ErrorKind::HelpDisplayed
to ErrorKind::DisplayHelp
- Renamed
ErrorKind::VersionDisplayed
to ErrorKind::DisplayVersion
- Added
#[non_exhaustive]
to clap::{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<_>
and Option<Vec<_>>
have changed from multiple
to multiple_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
via clap::Parser
(requires derive
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 with App::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 generating Arg::possible_values
(requires derive
feature flag)
-
Disable built-in help/version behavior with AppSettings::NoAutoHelp
and AppSettings::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
) with before_long_help
and after_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 to AppSettings::AllowInvalidUtf8ForExternalSubcommands
and ArgSettings::AllowInvalidUtf8
- Debug builds will assert when the
ArgMatches
calls do not match the UTF-8 setting.
- See clap-rs/clap#751
-
clap::PossibleValue
to allow
-
Allow arguments to conflict with all others via Arg::exclusive
(clap-rs/clap#1583)
-
Validate arguments with a regex (required regex
feature flag)
-
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)
with Arg::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
) with AppSettings::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)
-
Added arg!
macro for creating an Arg
from a compile-time usage parser
-
(Experimental) Busybox-like multi-call support
-
(Experimental) Alias an argument to anything group of arguments
- See
App::replace
behind unstable-replace
feature flag
- See clap-rs#1603
-
(Experimental) Grouping of multiple values within multiple occurrences
- See
ArgMatches::grouped_values_of
behind unstable-grouped
feature flag
- See clap-rs/clap#1026
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 with ArgEnum
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
with Arg::multiple_values
and Arg::multiple_occurrences
app_from_crate!
defaults to separating multiple authors with ", "
- Ensure all examples work
IgnoreCase
is now unicode aware (requires unicode
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 in Cargo.toml
with app_from_crate
- Do not show
--help
in cmd help
with DisableHelpFlag
(clap-rs/clap#3169)
- Do not show
--help
in cmd help help
that doesn't work (clap-rs/clap#3169)
From structopt 0.3.25
- Support
SubcommandsNegateReqs
by allowing required Option<_>
s (clap-rs/clap#2255)
- Infer
AllowInvalidUtf8
based on parser (clap-rs/clap#751)
- Gracefully handle empty
authors
field in Cargo.toml
- Don't panic with
default_value_os
but treat it like default_value
(clap-rs/clap#3031)
- When using
flatten
and subcommand
, ensure our doc comment always overrides the nested container's doc comment, whether it has only about
or about
and long_about
(clap-rs/clap#3175)
On top of the clap 2 changes
Minimum Required Rust
- As of this release,
clap
requires rustc 1.54.0
or greater.
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Compare Source
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.