Update Rust crate clap to 3.2.23
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
v3.2.23
[3.2.23] - 2022-10-24
Fixes
- Upgrade to
textwrap0.16
v3.2.22
[3.2.22] - 2022-09-16
Fixes
- Unify dependencies on
terminal_sizeto the 0.2 release
v3.2.21
[3.2.21] - 2022-09-12
Features
-
TypedValueParser::mapto allow reusing existing value parsers for other purposes
v3.2.20
[3.2.20] - 2022-09-02
Features
-
ArgMatches::get_counthelp forArgAction::Count -
ArgMatches::get_flaghelp 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_helpnow 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_tanddefault_values_os_tattributes
v3.2.14
Fixes
- A
multiple_valuespositional 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_aliaesandArg::get_all_aliases
v3.2.10
Fixes
- Loosen lifetime on
Command::mut_subcommand
v3.2.8
Features
- Added
Command::mut_subcommandto 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
deprecatedCargo.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_helpnow respectsCommand::colored_help - (derive) Improved error messages
v3.2.0
Compatibility
MSRV is now 1.56.0 (#3732)
Behavior
- Defaults no longer satisfy
requiredand its variants (#3793) - When misusing
ArgMatches::value_ofand 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::ArgEnumtoclap::ValueEnum(#3799)
Replaced
-
Arg::allow_invalid_utf8withArg::value_parser(value_parser!(PathBuf))(#3753) -
Arg::validator/Arg::validator_oswithArg::value_parser(#3753) -
Arg::validator_regexwith users providing their ownbuilder::TypedValueParser(#3756) -
Arg::forbid_empty_valueswithbuilder::NonEmptyStringValueParser/builder::PathBufValueParser(#3753) -
Arg::possible_valueswithArg::value_parser([...]),builder::PossibleValuesParser, orbuilder::EnumValueParser(#3753) -
Arg::max_occurrenceswitharg.action(ArgAction::Count).value_parser(value_parser!(u8).range(..N))for flags (#3797) -
Arg::multiple_occurrenceswithArgAction::AppendorArgAction::Countthough positionals will needArg::multiple_values(#3772, #3797) -
Command::args_override_selfwithArgAction::Set(#2627, #3797) -
AppSettings::NoAutoVersionwithArgActionorCommand::disable_version_flag(#3800) -
AppSettings::NoHelpVersionwithArgActionorCommand::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_argwithArgMatches::{try_get_one,try_get_many}(#3753) -
ArgMatches::occurrences_ofwithArgMatches::value_sourceorArgAction::Count(#3797) -
ArgMatches::is_presentwithArgMatches::contains_idorArgAction::SetTrue(#3797) -
ArgAction::StoreValuewithArgAction::SetorArgAction::Append(#3797) -
ArgAction::IncOccurrenceswithArgAction::SetTrueorArgAction::Count(#3797) -
(derive)
#[clap(parse(...))]replaced with: (#3589, #3794)- For default parsers (no
parseattribute), 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-v4feature changes the default away fromparsetoaction/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 rightValueParserautomatically). - For
#[clap(parse(try_from_str = ...)], replace it with#[clap(value_parser = ...)] - For most other cases, a type implementing
TypedValueParserwill 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
TypedValueParsers 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 theValueParserFactorytrait (#3755) -
[&str]is implicitly a value parser for possible values - All
ArgMatchesgetters 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_rawto access the underlyingOsStrs -
PathBufvalue parsers implyValueHint::AnyPathfor 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--helpbehavior -
ArgAction::Version: existing--versionbehavior -
ArgAction::Set: Overwrite existing values (likeArg::multiple_occurrencesmixed withCommand::args_override_self) (#3777) -
ArgAction::Append: likeArg::multiple_occurrences(#3777) -
ArgAction::SetTrue: Treat--flagas--flag=true(#3775)- Implies
Arg::default_value("false")(#3786) - Parses
Arg::envviaArg::value_parser
- Implies
-
ArgAction::SetFalse: Treat--flagas--flag=false(#3775)- Implies
Arg::default_value("true")(#3786) - Parses
Arg::envviaArg::value_parser
- Implies
-
ArgAction::Count: Treat--flag --flag --flagas--flag=1 --flag=2 --flag=3(#3775)- Implies
Arg::default_value("0")(#3786) - Parses
Arg::envviaArg::value_parser
- Implies
-
-
(derive) Opt-in to new
Arg::value_parser/Arg::actionwith either#[clap(value_parser)](#3589, #3742) /#[clap(action)]attributes (#3794) -
Command::multicallis now stable for busybox-like programs and REPLs (#2861, #3684) -
ArgMatches::{try_,}contains_idfor 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_sourceandArgMatches::occurrences_offor external subcommands (#3732) - Use value delimiter for
Arg::default_missing_values(#3761, #3765) - Split
Arg::default_value/Arg::envon value delimiters independent of whether--was used (#3765) - Allow applying defaults to flags (#3294, 3775)
- Defaults no longer satisfy
requiredand its variants (#3793)
v3.1.18
Fixes
- Fix deprecated
arg_enum!for users migrating to clap3 (#3717) - Verify all
required_unless_present_allarguments exist - Verify group members exist before processing group members (#3711)
-
(help) Use
...when not enoughvalue_namesare supplied
gated behind unstable-v4
- Verify
requiredis not used with conditional required settings (#3660) - Disallow more
value_namesthannumber_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::idasverbatimcasing (#3282)
v3.1.17
Fixes
- Allow value names for
arg!macro to have dashes when quoted, like longs
v3.1.16
Fixes
-
(parser)
Arg::exclusiveoverridesArg::required, like other conflicts - (error) Don't duplicate arguments in usage
- (error) Don't show hidden arguments in conflict error usage
-
(help) New
help_templatevariable{name}to fix problems with{bin} - (help) Don't wrap URLs
gated behind unstable-v4
- Leading dashes in
Arg::longare no longer allowed -
(help) Use
Command::display_namein 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::buildwith a required positional argument nested several layers in subcommands
v3.1.13
Fixes
- Help subcommand and
Command::write_helpnow 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
debugfeature - Allow disabling
colorfeature withdebugfeature 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
ArgGroupoverrideArg::required, making the behavior consistent with how we calculate conflicts for error reporting -
Arg::overrides_withalways overrideArg::required, not just when the parser processes an override
v3.1.10
Features
- Expose
Command::buildfor custom help generation or other command introspection needs
v3.1.9
Fixes
- Pin the
clap_deriveversion so a compatible version is always used withclap
v3.1.8
Fixes
- Add
Debugimpls to more types
v3.1.7
Fixes
-
(derive) Abort, rather than ignore, when deriving
ArgEnumwith non-unit unskipped variants
v3.1.6
Fixes
- Don't panic when validating delimited defaults (#3541)
- Make it clearer that
cargofeature is needed - Documentation improvements
v3.1.5
Fixes
- Dependency upgrade
v3.1.4
Features
-
(help) Show
PossibleValue::helpin 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_allarguments exist - Verify group members exist before processing group members (#3711)
-
(help) Use
...when not enoughvalue_namesare supplied
gated behind unstable-v4
- Verify
requiredis not used with conditional required settings (#3660) - Disallow more
value_namesthannumber_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::idasverbatimcasing (#3282)
v3.1.0
Compatibility
Changes in behavior of note that are not guaranteed to be compatible across releases:
-
(help)
helpsubcommand 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::Commandis now preferred overclap::App(#3089 in #3472) -
(help)
helpsubcommand 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::AppSettingsare nearly all deprecated and replaced with builder methods and getters (#2717) -
(builder)
clap::ArgSettingsis deprecated and replaced with builder methods and getters (#2717) -
(builder)
clap::Arg::idandclap::ArgGroup::idare now preferred overclap::Arg::nameandclap::ArgGroup::name(#3335) -
(help)
clap::Command::next_help_headingis now preferred overclap::Command::help_heading(#1807, #1553) -
(error)
clap::error::ErrorKindis 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_sourceto 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::contextAPI to open the door for fully-custom error messages (#2628)-
(error)
clap::error::ErrorKindnow implementsDisplay
-
(error)
Fixes
- (builder) Some functions were renamed for consistency and fixing spelling issues
-
(builder) Allow
clap::Command::colorto override previous calls (#3449) - (parse) Propagate globals with multiple subcommands (#3428)
-
(validation) Give
ArgRequiredElseHelpprecedence 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
-hconflicts (#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
parseattribute - (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
DisableColoredHelponcmd 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
Appbuilding (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
ArgMatchesasserts - List correct replacement for deprecated
Parser::from_clap(#3257)
v3.0.4
Features
- For very limited cases, like
cargo, exposeArgMatches::is_valid_argto avoid panicing on undefined arguments
v3.0.3
Fixes
- Specify cause of debug assert failure
v3.0.2
Fixes
- Ignore
Lastwhen 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
StructOpttraits 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_usagehas 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,
-hand--helpoutput at a minimum (recommendation: trycmd for snapshot testing) - Update your dependency
-
If you use
no-default-features: add thestdfeature
-
If you use
- Resolve compiler errors
- Resolve behavior changes
- Refactor your
Appcreation 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
ArgMatchesasserts 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,
-hand--helpoutput 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 thestdfeature
-
If you use
- Resolve compiler errors, including
- Update your
usestatements fromstructoptandstructopt::claptoclap
- 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,
-hand--helpoutput at a minimum (recommendation: trycmd for snapshot testing) - Update your dependency
- Add in
derive,env,cargo, orunicodefeature 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::aboutArg::long_aboutback tohelpandlong_helpand changePossibleValue::abouttohelp(clap-rs/clap#3075) - Change
AppSettings::HelpRequiredtoAppSettings::HelpExpected - Change
PossibleValue::hiddentoPossibleValue::hide - Change
App::subcommand_placeholdertoApp::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 forVecchanges -
If using builder: test your application under various circumstances to see if
ArgMatchesasserts regardingAllowInvalidUtf8.
- At your leisure: resolve deprecation notices
BREAKING CHANGES
From clap 2
Subtle changes (i.e. compiler won't catch):
-
AppSettings::UnifiedHelpMessageis now default behaviour-
{flags}and{unified}will assert if present inApp::help_template - See clap-rs/clap#2807
-
-
AppSettings::EnableColoredHelpis now the default behavior but can be opted-out withAppSettings::DisableColoredHelp(clap-rs/clap#2806) -
App::override_usageno longer implies a leading\t, allowing multi lined usages -
Arg::require_equalsno longer impliesArgSettings::ForbidEmptyValues(#2233) -
Arg::require_delimiterno longer impliesArgSettings::TakesValueandArgSettings::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_insensitiveandArg::multiple_valuesno longer implyArgSettings::TakesValue(#2233) -
ArgMatches::is_presentno 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 meantmultiplewhich is still true for--option [val].... Now[name]... --option [val]results inArgSettings::MultipleOccurrences. - Usage exit code changed from
1to2(clap-rs/clap#1327) - Reject
--foo=barwhentakes_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 thestdfeature (reserved for future work) - Gated env support behind
envfeature flag- Impacts
Arg::env,Arg::env_os,Arg::hide_env_values,ArgSettings::HideEnvValues - See clap-rs/clap#2694
- Impacts
- Gated crate information behind
cargofeature flag- Impacts
crate_name!,crate_version!,crate_authors!,crate_description!,app_from_crate!
- Impacts
-
AppSettings::StrictUtf8is now default behaviour and asserts ifAppSettings::AllowInvalidUtf8ForExternalSubcommandsandArgSettings::AllowInvalidUtf8andArgMatches::value_of_osaren't used together-
AppSettings::AllowInvalidUtf8has been removed - clap-rs/clap#751
-
-
Arg::shortandArg::value_delimiternow take acharinstead of a&str -
ArgMatchespanics 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::EmptyValuesin favor ofArgSettings::ForbidEmptyValues - Validator signatures have been loosed:
-
Arg::validatornow takes first argument asFn(&str) -> Result<O, E: ToString>instead ofFn(String) -> Result<(), String> -
Arg::validator_osnow takes first argument asFn(&OsStr) -> Result<O, OsString>instead ofFn(&OsStr) -> Result<(), OsString>
-
-
Arg::value_namenow sets, rather than appends (see clap-rs/clap#2634) - Upgrade
yaml-rustfrom 0.3 to 0.4 - Replaced
ArgGroup::from(BTreeMap)toArgGroup::from(yaml) - Replaced
ArgMatches::usagewithApp::generate_usage - Replaced
Arg::settingswithArg::setting(Setting1 | Setting2) -
AppandArgnow need only one lifetime - Removed deprecated
App::with_defaults, replaced withapp_from_crate - Removed deprecated
AppSettings::PropagateGlobalValuesDown(now the default) - Some
Appfunctions, likeApp::write_helpnow take&mut selfinstead of&self -
Error::messageis now private, useError::to_string -
Arg::default_value_if,Arg::default_value_if_os,Arg::default_value_ifs,Arg::default_value_ifs_osnow takes the default value parameter as an option (clap-rs/clap#1406) - Changed
App::print_help&App::print_long_helpto now returnstd::io::Result - Changed
App::write_help&App::write_long_helpto now returnstd::io::Result - Changed
Arg::index,Arg::number_of_values,Arg::min_values,Arg::max_valuesto takingusizeinstead of u64 - Changed
Error::infoto typeVec<String>instead ofOption<Vec<String>> - Changed
ArgMatches::subcommandto now returnOption<(&str, &ArgMatches)> - Renamed
ErrorKind::MissingArgumentOrSubcommandtoErrorKind::DisplayHelpOnMissingArgumentOrSubcommand - Renamed
ErrorKind::HelpDisplayedtoErrorKind::DisplayHelp - Renamed
ErrorKind::VersionDisplayedtoErrorKind::DisplayVersion - Added
#[non_exhaustive]toclap::{ValueHint, ErrorKind, AppSettings, ArgSettings}(clap-rs/clap#3167)
From structopt 0.3.25
- By default, the
Appisn'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 frommultipletomultiple_occurrences
On top of the clap 2 changes
Performance
From clap 2
- Split out non-default
unicodefeature flag for faster builds and smaller binaries for ASCII-only CLIs. - Split out non-default
envfeature flag for faster builds and smaller binaries.
Features
From clap 2
-
Integration of
structopt::StructOptviaclap::Parser(requiresderivefeature flag) -
Custom help headings
-
App::help_heading(apply to all future args) -
Arg::help_heading(apply to current arg) -
App::subcommand_help_headingalong withApp::subcommand_value_name(apply to subcommands) - See clap-rs/clap#805
-
AppSettings::UnifiedHelpMessageis now default behaviour (clap-rs/clap#2807)
-
-
Deriving of
ArgEnumfor generatingArg::possible_values(requiresderivefeature flag) -
Disable built-in help/version behavior with
AppSettings::NoAutoHelpandAppSettings::NoAutoVersion -
Change an existing arg with new builder method
mut_arg(particularly helpful for--helpand--version) -
Provide extra context in long help messages (
--help) withbefore_long_helpandafter_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_ofthanks toAppSettings::AllowInvalidUtf8ForExternalSubcommandsandArgSettings::AllowInvalidUtf8- Debug builds will assert when the
ArgMatchescalls do not match the UTF-8 setting. - See clap-rs/clap#751
- Debug builds will assert when the
-
clap::PossibleValueto 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
regexfeature flag)- See clap-rs/clap
-
Arg::default_missing_valuefor cases like--color[=<WHEN>](clap-rs/clap#1587) -
clap::App::color/clap::ColorChoiceto specify color setting for the app -
Custom error reporting with
App::error -
App::debug_asserttest 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 helpto print long help (--helpinstead 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
falsefor flags, in addition to "not-present" (clap-rs/clap#2539)-
n,no,f,false,off,0
-
-
Added
arg!macro for creating anArgfrom a compile-time usage parser -
(Experimental) Busybox-like multi-call support
- See
AppSettings::Multicallbehindunstable-multicallfeature flag - See clap-rs/clap#1120
- See
-
(Experimental) Alias an argument to anything group of arguments
- See
App::replacebehindunstable-replacefeature flag - See clap-rs#1603
- See
-
(Experimental) Grouping of multiple values within multiple occurrences
- See
ArgMatches::grouped_values_ofbehindunstable-groupedfeature 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
updateAPI - New
arg_enumattribute for integrating withArgEnumtrait
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_versionare set (see clap-rs/clap#2812) - General completion script improvements
- Limited default help text wrapping to 100 when
wrap_helpfeature is not enabled - Be more specific than
Arg::multiplewithArg::multiple_valuesandArg::multiple_occurrences -
app_from_crate!defaults to separating multiple authors with", " - Ensure all examples work
-
IgnoreCaseis now unicode aware (requiresunicodefeature flag) - Always respect
ColorChoice::Never, even if that means we skip colors in some cases -
ArgMatchespanics on unknown arguments - Gracefully handle empty
authorsfield inCargo.tomlwithapp_from_crate - Do not show
--helpincmd helpwithDisableHelpFlag(clap-rs/clap#3169) - Do not show
--helpincmd help helpthat doesn't work (clap-rs/clap#3169)
From structopt 0.3.25
- Support
SubcommandsNegateReqsby allowing requiredOption<_>s (clap-rs/clap#2255) - Infer
AllowInvalidUtf8based on parser (clap-rs/clap#751) - Gracefully handle empty
authorsfield inCargo.toml - Don't panic with
default_value_osbut treat it likedefault_value(clap-rs/clap#3031) - When using
flattenandsubcommand, ensure our doc comment always overrides the nested container's doc comment, whether it has onlyaboutoraboutandlong_about(clap-rs/clap#3175)
On top of the clap 2 changes
Minimum Required Rust
- As of this release,
claprequiresrustc 1.54.0or greater.
v3.0.0-rc.13
v3.0.0-rc.12
v3.0.0-rc.11
v3.0.0-rc.10
v3.0.0-rc.9
v3.0.0-rc.8
v3.0.0-rc.7
v3.0.0-rc.6
v3.0.0-rc.5
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-rc.0
v3.0.0-beta.5
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.