Update Rust crate clap to v4 #9

Merged
pierre merged 1 commits from renovate/clap-4.x into master 2022-10-08 12:55:19 +00:00
Owner

This PR contains the following updates:

Package Type Update Change
clap dependencies major 3.2.22 -> 4.0.10

Release Notes

clap-rs/clap

v4.0.10

Compare Source

Features

v4.0.9

Compare Source

Fixes
  • (derive) Process doc comments for #[command(subcommand)] like in clap v3

v4.0.8

Compare Source

Fixes
  • (derive) Remove a low-value assert preventing defaulting Help and Version actions

v4.0.7

Compare Source

Features
  • (derive) Populate implicit ArgGroup (#​3165)
Fixes
  • (derive) Support #[group(skip)] on Parser 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

Compare Source

Features

v4.0.5

Compare Source

v4.0.4

Compare Source

Fixes
  • (error) Specialize the self-conflict error to look like clap v3

v4.0.3

Compare Source

Fixes
  • (error) Quote literals consistently
  • (error) Stylize escape (--) suggestions
  • (error) Format help flag as a literal

v4.0.2

Compare Source

Fixes
  • (parser) SetFalse should conflict with itself like SetTrue and Set
  • (parser) Allow one-off overrides

v4.0.1

Compare Source

Features

v4.0.0

Compare Source

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)
  • Replacing AppSettings and ArgSettings enums with getters/setters
  • Clarifying terms and making them more consistent
Migrating

Steps:

  1. Upgrade to v3 if you haven't already
  2. Add CLI tests (including example below), -h and --help output at a minimum (recommendation: trycmd for snapshot testing)
  3. If using Builder API: Explicitly set the arg.action(ArgAction::...) on each argument (StoreValue for options and IncOccurrences for flags)
  4. Run cargo check --features clap/deprecated and resolve all deprecation warnings
  5. Upgrade to v4
  6. Update feature flags
  • If default-features = false, run cargo add clap -F help,usage,error-context
  • Run cargo add clap -F wrap_help unless you want to hard code line wraps
  1. Resolve compiler errors
  2. Resolve behavior changes (see "subtle changes" under BREAKING CHANGES)
  3. 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, requiring ArgMatches::get_flag instead of ArgMatches::is_present
    • ArgAction::Count, requiring ArgMatches::get_count instead of ArgMatches::occurrences_of
    • ArgAction::Set, requiring ArgMatches::get_one instead of ArgMatches::value_of
    • ArgAction::Append, requiring ArgMatches::get_many instead of ArgMatches::values_of
  • ArgAction::Set, ArgAction::SetTrue, and Arg::Action::SetFalse now
    conflict by default to be like ArgAction::StoreValue and
    ArgAction::IncOccurrences, requiring cmd.args_override_self(true) to override instead (#​4261)
  • By default, an Args default action is ArgAction::Set, rather than ArgAction::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, and PossibleValue, assuming 'static. string feature flag will enable support for Strings (#​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 and error-context, requiring adding them back in if default-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 with Command::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, set next_display_order(None) (#​2808)
  • (help) Subcommand display order respects Command::next_display_order instead of DeriveDisplayOrder 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, and Command::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, see Command::subcommand_help_heading and Arg::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 any ArgAction::SetTrue flag (#​3776)
  • (derive) Leave Arg::id as verbatim casing, requiring updating of string references to other args like in conflicts_with or requires (#​3282)
  • (derive) Doc comments for ValueEnum variants will now show up in --help (#​3312)
  • (derive) When deriving Args, and ArgGroup 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 arg Ids, rather than the values to reduce overhead and offer more flexibility. (#​4072)
  • Changed Arg::number_of_values (average-across-occurrences) to Arg::num_args (per-occurrence) (raw CLI args, not parsed values) (#​2688, #​4023)
    • num_args(0) no longer implies takes_value(true).multiple_values(true) (#​4023)
    • num_args(1) no longer implies multiple_values(true) (#​4023)
    • Does not check default or env values, only what the user explicitly passes in (#​4025)
    • No longer terminates on delimited values (#​4025)
  • Replace Arg::min_values (across all occurrences) with Arg::num_args(N..) (per occurrence) to reduce confusion over different value count APIs (#​4023)
  • Replace Arg::max_values (across all occurrences) with Arg::num_args(1..=M) (per occurrence) to reduce confusion over different value count APIs (#​4023)
  • Replace Arg::multiple_values(true) with Arg::num_args(1..) and Arg::multiple_values(false) with Arg::num_args(0) to reduce confusion over different value count APIs (#​4023)
  • Replace Arg::takes_value(true) with Arg::num_args(1) and Arg::takes_value(false) with Arg::num_args(0) to reduce confusion over different value count APIs
  • Remove Arg::require_value_delimiter, either users could use Arg::value_delimiter or implement a custom parser with TypedValueParser as it was mostly to make multiple_values(true) act like multiple_values(false) and isn't needed anymore (#​4026)
  • Arg::new("help") and Arg::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 as global(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 own Arg::new("help").long("help").action(ArgAction::Help).global(true). (#​4056)
  • ArgAction::SetTrue and ArgAction::SetFalse now prioritize Arg::default_missing_value over their standard behavior (#​4000)
  • Changed Arg::requires_ifs and Arg::default_value*_ifs* to taking an ArgPredicate, removing ambiguity with None when accepting owned and borrowed types (#​4084)
  • Removed PartialEq and Eq from Command so we could change external subcommands to use a ValueParser (#​3990)
  • Various Arg, Command, and ArgGroup calls were switched from accepting &[] to [] via IntoIterator to be more flexible (#​4072)
  • Arg::short_aliases and other builder functions that took &[] need the & dropped (#​4081)
  • ErrorKind and Result moved into the error module
  • ErrorKind::EmptyValue replaced with ErrorKind::InvalidValue to remove an unnecessary special case (#​3676, #​3968)
  • ErrorKind::UnrecognizedSubcommand replaced with ErrorKind::InvalidSubcommand to remove an unnecessary special case (#​3676)
  • Changed the default type of allow_external_subcommands from String to OsString as that is less likely to cause bugs in user applications (#​3990)
  • (help) Command::render_usage now returns a StyledStr (#​4248)
  • (derive) Changed the default for arguments from parse to value_parser, removing parse support (#​3827, #​3981)
    • #[clap(value_parser)] and #[clap(action)] are now redundant
  • (derive) subcommand_required(true).arg_required_else_help(true) is set instead of SubcommandRequiredElseHelp to give more meaningful errors when subcommands are missing and to reduce redundancy (#​3280)
  • (derive) Remove arg_enum attribute in favor of value_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 require num_args(0..=N), now it does (#​4023)
  • (assert) Leading dashes in Arg::long are no longer allowed (#​3691)
  • (assert) Disallow more value_names than num_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 or mut_subcommand receiving an invalid command name
Compatibility

MSRV is now 1.60.0

Deprecated

  • Arg::use_value_delimiter in favor of Arg::value_delimiter to avoid having multiple ways of doing the same thing
  • Arg::requires_all in favor of Arg::requires_ifs now that it takes an ArgPredicate to avoid having multiple ways of doing the same thing
  • Arg::number_of_values in favor of Arg::num_args to clarify semantic differences
  • default_value_os, default_values_os, default_value_if_os, and default_value_ifs_os as the non _os variants now accept either a str or an OsStr (#​4141)
  • Arg::env_os in favor of Arg::env
  • Command::dont_collapse_args_in_usage is now the default (#​4151)
  • Command::trailing_var_arg in favor of Arg::trailing_var_arg to make it clearer which arg it is meant to apply to (#​4187)
  • Command::allow_hyphen_values in favor of Arg::allow_hyphen_values to make it clearer which arg it is meant to apply to (#​4187)
  • Command::allow_negative_numbers in favor of Arg::allow_negative_numbers to make it clearer which arg it is meant to apply to (#​4187)
  • (help) Deprecated Command::write_help and Command::write_long_help in favor of Command::render_help and Command::render_long_help (#​4248)
  • (derive) structopt and clap attributes in favor of the more specific command, arg, and value 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 and COLUMNS 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_parsers for ArgAction::SetTrue / ArgAction::SetFalse (#​4092)
  • Add From<&OsStr>, From<OsString>, From<&str>, and From<String> to value_parser! (#​4257)
  • Allow resetting most builder methods
  • Can now pass runtime generated data to Command, Arg, ArgGroup, PossibleValue, etc without managing lifetimes with the string feature flag (#​2150, #​4223)
  • New default error-context, help and usage feature flags that can be turned off for smaller binaries (#​4236)
  • Added StyledStr::ansi() to Display with ANSI escape codes (#​4248)
  • (error) Error::apply for changing the formatter for dropping binary size (#​4111)
  • (error) Error::renderfor formatting the error into a StyledStr
  • (help) Show PossibleValue::help in long help (--help) (#​3312)
  • (help) New {tab} variable for Command::help_template (#​4161)
  • (help) Command::render_help and Command::render_long_help for formatting the error into a StyledStr (#​3873, #​4248)
  • (help) Command::render_usage now returns a StyledStr (#​4248)
Fixes
  • Verify required is not used with conditional required settings (#​3660)
  • Replaced cmd.allow_invalid_for_utf8_external_subcommands with cmd.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 accept 0..=1 per occurrence rather than across all occurrences, making it safe to use with ArgAction::Append (#​4001)
  • Allow OsStrs for Arg::{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 and COLUMNS variables are used (#​4186)
  • (help) Use Command::display_name in the help title rather than Command::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 than Command::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, like Command::allow_hyphen_values (#​4187)
  • (parser) Prefer InvalidSubcommand over UnknownArgument in more cases (#​4219)
  • (derive) Detect escaped external subcommands that look like built-in subcommands (#​3703)
  • (derive) Leave Arg::id as verbatim casing (#​3282)
  • (derive) Default to #[clap(value_parser, action)] instead of #[clap(parse)] (#​3827)

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, click this checkbox.

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [clap](https://github.com/clap-rs/clap) | dependencies | major | `3.2.22` -> `4.0.10` | --- ### Release Notes <details> <summary>clap-rs/clap</summary> ### [`v4.0.10`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;4010---2022-10-05) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.9...v4.0.10) ##### Features - *(derive)* Support `#[arg(flatten)]` on `Option` types ([#&#8203;4211](https://github.com/clap-rs/clap/issues/4211), [#&#8203;4350](https://github.com/clap-rs/clap/issues/4350)) ### [`v4.0.9`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;409---2022-10-03) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.8...v4.0.9) ##### Fixes - *(derive)* Process doc comments for `#[command(subcommand)]` like in clap v3 ### [`v4.0.8`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;408---2022-10-01) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.7...v4.0.8) ##### Fixes - *(derive)* Remove a low-value assert preventing defaulting `Help` and `Version` actions ### [`v4.0.7`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;407---2022-09-30) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.6...v4.0.7) ##### Features - *(derive)* Populate implicit ArgGroup ([#&#8203;3165](https://github.com/clap-rs/clap/issues/3165)) ##### Fixes - *(derive)* Support `#[group(skip)]` on `Parser` 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`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;406---2022-09-30) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.5...v4.0.6) ##### Features - *(derive)* Support `#[group(skip)]` ([#&#8203;4279](https://github.com/clap-rs/clap/issues/4279), [#&#8203;4301](https://github.com/clap-rs/clap/issues/4301)) ### [`v4.0.5`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;405---2022-09-30) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.4...v4.0.5) ### [`v4.0.4`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;404---2022-09-29) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.3...v4.0.4) ##### Fixes - *(error)* Specialize the self-conflict error to look like clap v3 ### [`v4.0.3`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;403---2022-09-29) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.2...v4.0.3) ##### Fixes - *(error)* Quote literals consistently - *(error)* Stylize escape (`--`) suggestions - *(error)* Format help flag as a literal ### [`v4.0.2`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;402---2022-09-28) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.1...v4.0.2) ##### Fixes - *(parser)* `SetFalse` should conflict with itself like `SetTrue` and `Set` - *(parser)* Allow one-off overrides ### [`v4.0.1`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;4010---2022-10-05) [Compare Source](https://github.com/clap-rs/clap/compare/v4.0.0...v4.0.1) ##### Features - *(derive)* Support `#[arg(flatten)]` on `Option` types ([#&#8203;4211](https://github.com/clap-rs/clap/issues/4211), [#&#8203;4350](https://github.com/clap-rs/clap/issues/4350)) ### [`v4.0.0`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;400---2022-09-28) [Compare Source](https://github.com/clap-rs/clap/compare/v3.2.22...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](https://github.com/clap-rs/clap/issues/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](https://github.com/clap-rs/clap/issues/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) - Replacing `AppSettings` and `ArgSettings` enums with getters/setters - Clarifying terms and making them more consistent ##### Migrating Steps: 0. [Upgrade to v3](https://github.com/clap-rs/clap/blob/v3-master/CHANGELOG.md#migrating) if you haven't already 1. Add CLI tests (including example below), `-h` and `--help` output at a minimum (recommendation: [trycmd](https://docs.rs/trycmd/) for snapshot testing) 2. *If using Builder API*: Explicitly set the `arg.action(ArgAction::...)` on each argument (`StoreValue` for options and `IncOccurrences` for flags) 3. Run `cargo check --features clap/deprecated` and resolve all deprecation warnings 4. Upgrade to v4 5. Update feature flags - *If `default-features = false`*, run `cargo add clap -F help,usage,error-context` - Run `cargo add clap -F wrap_help` unless you want to hard code line wraps 6. Resolve compiler errors 7. Resolve behavior changes (see "subtle changes" under BREAKING CHANGES) 8. *At your leisure:* resolve new deprecation notices Example test (derive): ```rust #[derive(clap::Parser)] struct Cli { ... } #[test] fn verify_cli() { use clap::CommandFactory; Cli::command().debug_assert() } ``` Example test (builder): ```rust 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 ```rust .arg(Arg::new("flag").long("flag")) # --flag .arg(Arg::new("option").long("option").takes_value(true)) # --option <option> ``` After: ```rust .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 ([#&#8203;3795](https://github.com/clap-rs/clap/issues/3795)): - `ArgAction::SetTrue`, requiring `ArgMatches::get_flag` instead of `ArgMatches::is_present` - `ArgAction::Count`, requiring `ArgMatches::get_count` instead of `ArgMatches::occurrences_of` - `ArgAction::Set`, requiring `ArgMatches::get_one` instead of `ArgMatches::value_of` - `ArgAction::Append`, requiring `ArgMatches::get_many` instead of `ArgMatches::values_of` - `ArgAction::Set`, `ArgAction::SetTrue`, and `Arg::Action::SetFalse` now conflict by default to be like `ArgAction::StoreValue` and `ArgAction::IncOccurrences`, requiring `cmd.args_override_self(true)` to override instead ([#&#8203;4261](https://github.com/clap-rs/clap/issues/4261)) - By default, an `Arg`s default action is `ArgAction::Set`, rather than `ArgAction::IncOccurrence` to reduce confusing magic through consistency ([#&#8203;2687](https://github.com/clap-rs/clap/issues/2687), [#&#8203;4032](https://github.com/clap-rs/clap/issues/4032), see also [#&#8203;3977](https://github.com/clap-rs/clap/issues/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 ([#&#8203;4056](https://github.com/clap-rs/clap/issues/4056)) - Removed lifetimes from `Command`, `Arg`, `ArgGroup`, and `PossibleValue`, assuming `'static`. `string` feature flag will enable support for `String`s ([#&#8203;1041](https://github.com/clap-rs/clap/issues/1041), [#&#8203;2150](https://github.com/clap-rs/clap/issues/2150), [#&#8203;4223](https://github.com/clap-rs/clap/issues/4223)) - `arg!(--flag <value>)` is now optional, instead of required. Add `.required(true)` at the end to restore the original behavior ([#&#8203;4206](https://github.com/clap-rs/clap/issues/4206)) - Added default feature flags, `help`, `usage` and `error-context`, requiring adding them back in if `default-features = false` ([#&#8203;4236](https://github.com/clap-rs/clap/issues/4236)) - *(parser)* Always fill in `""` argument for external subcommands to make it easier to distinguish them from built-in commands ([#&#8203;3263](https://github.com/clap-rs/clap/issues/3263)) - *(parser)* Short flags now have higher precedence than hyphen values with `Arg::allow_hyphen_values`, to be consistent with `Command::allow_hyphen_values` ([#&#8203;4187](https://github.com/clap-rs/clap/issues/4187)) - *(parser)* `Arg::value_terminator` must be its own argument on the CLI rather than being in a delimited list ([#&#8203;4025](https://github.com/clap-rs/clap/issues/4025)) - *(help)* Line wrapping of help is now behind the existing `wrap_help` feature flag, either enable it or hard code your wraps ([#&#8203;4258](https://github.com/clap-rs/clap/issues/4258)) - *(help)* Make `DeriveDisplayOrder` the default and removed the setting. To sort help, set `next_display_order(None)` ([#&#8203;2808](https://github.com/clap-rs/clap/issues/2808)) - *(help)* Subcommand display order respects `Command::next_display_order` instead of `DeriveDisplayOrder` and using its own initial display order value ([#&#8203;2808](https://github.com/clap-rs/clap/issues/2808)) - *(help)* Subcommands are now listed before arguments. To get the old behavior, see `Command::help_template` ([#&#8203;4132](https://github.com/clap-rs/clap/issues/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`, and `Command::subcommand_help_heading` ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132)) - *(help)* "Command" is used as the section heading for subcommands and `COMMAND` for the value name. To get the old behavior, see `Command::subcommand_help_heading` and `Arg::subcommand_value_name` ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4155](https://github.com/clap-rs/clap/issues/4155)) - *(help)* Whitespace in help output is now trimmed to ensure consistency regardless of how well a template matches the users needs. ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4156](https://github.com/clap-rs/clap/issues/4156)) - *(help)* name/version/author are removed by default from help output. To get the old behavior, see `Command::help_template`. ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4160](https://github.com/clap-rs/clap/issues/4160)) - *(help)* Indentation for second-line usage changed. ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4188](https://github.com/clap-rs/clap/issues/4188)) - *(env)* Parse `--help` and `--version` like any `ArgAction::SetTrue` flag ([#&#8203;3776](https://github.com/clap-rs/clap/issues/3776)) - *(derive)* Leave `Arg::id` as `verbatim` casing, requiring updating of string references to other args like in `conflicts_with` or `requires` ([#&#8203;3282](https://github.com/clap-rs/clap/issues/3282)) - *(derive)* Doc comments for `ValueEnum` variants will now show up in `--help` ([#&#8203;3312](https://github.com/clap-rs/clap/issues/3312)) - *(derive)* When deriving `Args`, and `ArgGroup` is created using the type's name, reserving it for future use ([#&#8203;2621](https://github.com/clap-rs/clap/issues/2621), [#&#8203;4209](https://github.com/clap-rs/clap/issues/4209)) - *(derive)* `next_help_heading` can now leak out of a `#[clap(flatten)]`, like all other command settings ([#&#8203;4222](https://github.com/clap-rs/clap/issues/4222)) Easier to catch changes: - Looking up a group in `ArgMatches` now returns the arg `Id`s, rather than the values to reduce overhead and offer more flexibility. ([#&#8203;4072](https://github.com/clap-rs/clap/issues/4072)) - Changed `Arg::number_of_values` (average-across-occurrences) to `Arg::num_args` (per-occurrence) (raw CLI args, not parsed values) ([#&#8203;2688](https://github.com/clap-rs/clap/issues/2688), [#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - `num_args(0)` no longer implies `takes_value(true).multiple_values(true)` ([#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - `num_args(1)` no longer implies `multiple_values(true)` ([#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - Does not check default or env values, only what the user explicitly passes in ([#&#8203;4025](https://github.com/clap-rs/clap/issues/4025)) - No longer terminates on delimited values ([#&#8203;4025](https://github.com/clap-rs/clap/issues/4025)) - Replace `Arg::min_values` (across all occurrences) with `Arg::num_args(N..)` (per occurrence) to reduce confusion over different value count APIs ([#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - Replace `Arg::max_values` (across all occurrences) with `Arg::num_args(1..=M)` (per occurrence) to reduce confusion over different value count APIs ([#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - Replace `Arg::multiple_values(true)` with `Arg::num_args(1..)` and `Arg::multiple_values(false)` with `Arg::num_args(0)` to reduce confusion over different value count APIs ([#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - Replace `Arg::takes_value(true)` with `Arg::num_args(1)` and `Arg::takes_value(false)` with `Arg::num_args(0)` to reduce confusion over different value count APIs - Remove `Arg::require_value_delimiter`, either users could use `Arg::value_delimiter` or implement a custom parser with `TypedValueParser` as it was mostly to make `multiple_values(true)` act like `multiple_values(false)` and isn't needed anymore ([#&#8203;4026](https://github.com/clap-rs/clap/issues/4026)) - `Arg::new("help")` and `Arg::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 as `global(true)`. ([#&#8203;4056](https://github.com/clap-rs/clap/issues/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 own `Arg::new("help").long("help").action(ArgAction::Help).global(true)`. ([#&#8203;4056](https://github.com/clap-rs/clap/issues/4056)) - `ArgAction::SetTrue` and `ArgAction::SetFalse` now prioritize `Arg::default_missing_value` over their standard behavior ([#&#8203;4000](https://github.com/clap-rs/clap/issues/4000)) - Changed `Arg::requires_ifs` and `Arg::default_value*_ifs*` to taking an `ArgPredicate`, removing ambiguity with `None` when accepting owned and borrowed types ([#&#8203;4084](https://github.com/clap-rs/clap/issues/4084)) - Removed `PartialEq` and `Eq` from `Command` so we could change external subcommands to use a `ValueParser` ([#&#8203;3990](https://github.com/clap-rs/clap/issues/3990)) - Various `Arg`, `Command`, and `ArgGroup` calls were switched from accepting `&[]` to `[]` via `IntoIterator` to be more flexible ([#&#8203;4072](https://github.com/clap-rs/clap/issues/4072)) - `Arg::short_aliases` and other builder functions that took `&[]` need the `&` dropped ([#&#8203;4081](https://github.com/clap-rs/clap/issues/4081)) - `ErrorKind` and `Result` moved into the `error` module - `ErrorKind::EmptyValue` replaced with `ErrorKind::InvalidValue` to remove an unnecessary special case ([#&#8203;3676](https://github.com/clap-rs/clap/issues/3676), [#&#8203;3968](https://github.com/clap-rs/clap/issues/3968)) - `ErrorKind::UnrecognizedSubcommand` replaced with `ErrorKind::InvalidSubcommand` to remove an unnecessary special case ([#&#8203;3676](https://github.com/clap-rs/clap/issues/3676)) - Changed the default type of `allow_external_subcommands` from `String` to `OsString` as that is less likely to cause bugs in user applications ([#&#8203;3990](https://github.com/clap-rs/clap/issues/3990)) - *(help)* `Command::render_usage` now returns a `StyledStr` ([#&#8203;4248](https://github.com/clap-rs/clap/issues/4248)) - *(derive)* Changed the default for arguments from `parse` to `value_parser`, removing `parse` support ([#&#8203;3827](https://github.com/clap-rs/clap/issues/3827), [#&#8203;3981](https://github.com/clap-rs/clap/issues/3981)) - `#[clap(value_parser)]` and `#[clap(action)]` are now redundant - *(derive)* `subcommand_required(true).arg_required_else_help(true)` is set instead of `SubcommandRequiredElseHelp` to give more meaningful errors when subcommands are missing and to reduce redundancy ([#&#8203;3280](https://github.com/clap-rs/clap/issues/3280)) - *(derive)* Remove `arg_enum` attribute in favor of `value_enum` to match the new name (we didn't have support in v3 to mark it deprecated) ([#&#8203;4127](https://github.com/clap-rs/clap/issues/4127)) - *(parser)* Assert when the CLI looksup an unknown args when external subcommand support is enabled to help catch bugs ([#&#8203;3703](https://github.com/clap-rs/clap/issues/3703)) - *(assert)* Sometimes `Arg::default_missing_value` didn't require `num_args(0..=N)`, now it does ([#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - *(assert)* Leading dashes in `Arg::long` are no longer allowed ([#&#8203;3691](https://github.com/clap-rs/clap/issues/3691)) - *(assert)* Disallow more `value_names` than `num_args` ([#&#8203;2695](https://github.com/clap-rs/clap/issues/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 or `mut_subcommand` receiving an invalid command name ##### Compatibility MSRV is now 1.60.0 Deprecated - `Arg::use_value_delimiter` in favor of `Arg::value_delimiter` to avoid having multiple ways of doing the same thing - `Arg::requires_all` in favor of `Arg::requires_ifs` now that it takes an `ArgPredicate` to avoid having multiple ways of doing the same thing - `Arg::number_of_values` in favor of `Arg::num_args` to clarify semantic differences - `default_value_os`, `default_values_os`, `default_value_if_os`, and `default_value_ifs_os` as the non `_os` variants now accept either a `str` or an `OsStr` ([#&#8203;4141](https://github.com/clap-rs/clap/issues/4141)) - `Arg::env_os` in favor of `Arg::env` - `Command::dont_collapse_args_in_usage` is now the default ([#&#8203;4151](https://github.com/clap-rs/clap/issues/4151)) - `Command::trailing_var_arg` in favor of `Arg::trailing_var_arg` to make it clearer which arg it is meant to apply to ([#&#8203;4187](https://github.com/clap-rs/clap/issues/4187)) - `Command::allow_hyphen_values` in favor of `Arg::allow_hyphen_values` to make it clearer which arg it is meant to apply to ([#&#8203;4187](https://github.com/clap-rs/clap/issues/4187)) - `Command::allow_negative_numbers` in favor of `Arg::allow_negative_numbers` to make it clearer which arg it is meant to apply to ([#&#8203;4187](https://github.com/clap-rs/clap/issues/4187)) - *(help)* Deprecated `Command::write_help` and `Command::write_long_help` in favor of `Command::render_help` and `Command::render_long_help` ([#&#8203;4248](https://github.com/clap-rs/clap/issues/4248)) - *(derive)* `structopt` and `clap` attributes in favor of the more specific `command`, `arg`, and `value` to open the door for [more features](https://github.com/clap-rs/clap/issues/1807) and [clarify relationship to the builder](https://github.com/clap-rs/clap/discussions/4090) ([#&#8203;1807](https://github.com/clap-rs/clap/issues/1807), [#&#8203;4180](https://github.com/clap-rs/clap/issues/4180)) - *(derive)* `#[clap(value_parser)]` and `#[clap(action)]` defaulted attributes (its the default) ([#&#8203;3976](https://github.com/clap-rs/clap/issues/3976)) Behavior Changes - *(help)* With `wrap_help` feature, if the terminal size cannot be determined, `LINES` and `COLUMNS` variables are used ([#&#8203;4186](https://github.com/clap-rs/clap/issues/4186)) ##### Features - `Arg::num_args` now accepts ranges, allowing setting both the minimum and maximum number of values per occurrence ([#&#8203;2688](https://github.com/clap-rs/clap/issues/2688), [#&#8203;4023](https://github.com/clap-rs/clap/issues/4023)) - Allow non-bool `value_parser`s for `ArgAction::SetTrue` / `ArgAction::SetFalse` ([#&#8203;4092](https://github.com/clap-rs/clap/issues/4092)) - Add `From<&OsStr>`, `From<OsString>`, `From<&str>`, and `From<String>` to `value_parser!` ([#&#8203;4257](https://github.com/clap-rs/clap/issues/4257)) - Allow resetting most builder methods - Can now pass runtime generated data to `Command`, `Arg`, `ArgGroup`, `PossibleValue`, etc without managing lifetimes with the `string` feature flag ([#&#8203;2150](https://github.com/clap-rs/clap/issues/2150), [#&#8203;4223](https://github.com/clap-rs/clap/issues/4223)) - New default `error-context`, `help` and `usage` feature flags that can be turned off for smaller binaries ([#&#8203;4236](https://github.com/clap-rs/clap/issues/4236)) - Added `StyledStr::ansi()` to `Display` with ANSI escape codes ([#&#8203;4248](https://github.com/clap-rs/clap/issues/4248)) - *(error)* `Error::apply` for changing the formatter for dropping binary size ([#&#8203;4111](https://github.com/clap-rs/clap/issues/4111)) - *(error)* `Error::render`for formatting the error into a `StyledStr` - *(help)* Show `PossibleValue::help` in long help (`--help`) ([#&#8203;3312](https://github.com/clap-rs/clap/issues/3312)) - *(help)* New `{tab}` variable for `Command::help_template` ([#&#8203;4161](https://github.com/clap-rs/clap/issues/4161)) - *(help)* `Command::render_help` and `Command::render_long_help` for formatting the error into a `StyledStr` ([#&#8203;3873](https://github.com/clap-rs/clap/issues/3873), [#&#8203;4248](https://github.com/clap-rs/clap/issues/4248)) - *(help)* `Command::render_usage` now returns a `StyledStr` ([#&#8203;4248](https://github.com/clap-rs/clap/issues/4248)) ##### Fixes - Verify `required` is not used with conditional required settings ([#&#8203;3660](https://github.com/clap-rs/clap/issues/3660)) - Replaced `cmd.allow_invalid_for_utf8_external_subcommands` with `cmd.external_subcommand_value_parser` ([#&#8203;3733](https://github.com/clap-rs/clap/issues/3733)) - `Arg::default_missing_value` now applies per occurrence rather than if a value is missing across all occurrences ([#&#8203;3998](https://github.com/clap-rs/clap/issues/3998)) - `arg!(--long [value])` to accept `0..=1` per occurrence rather than across all occurrences, making it safe to use with `ArgAction::Append` ([#&#8203;4001](https://github.com/clap-rs/clap/issues/4001)) - Allow `OsStr`s for `Arg::{required_if_eq,required_if_eq_any,required_if_eq_all}` ([#&#8203;4084](https://github.com/clap-rs/clap/issues/4084)) - *(help)* With `wrap_help` feature, if the terminal size cannot be determined, `LINES` and `COLUMNS` variables are used ([#&#8203;4186](https://github.com/clap-rs/clap/issues/4186)) - *(help)* Use `Command::display_name` in the help title rather than `Command::bin_name` - *(help)* Show when a flag is `ArgAction::Count` by adding an `...` ([#&#8203;4003](https://github.com/clap-rs/clap/issues/4003)) - *(help)* Use a more neutral palette for coloring ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4117](https://github.com/clap-rs/clap/issues/4117)) - *(help)* Don't rely on ALL CAPS for help headers ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4123](https://github.com/clap-rs/clap/issues/4123)) - *(help)* List subcommands first, focusing the emphasis on them ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4125](https://github.com/clap-rs/clap/issues/4125)) - *(help)* Do not include global args in `cmd help help` ([#&#8203;4131](https://github.com/clap-rs/clap/issues/4131)) - *(help)* Use `[positional]` in list when relevant ([#&#8203;4144](https://github.com/clap-rs/clap/issues/4144)) - *(help)* Show all `[positional]` in usage ([#&#8203;4151](https://github.com/clap-rs/clap/issues/4151)) - *(help)* Polish up subcommands by referring to them as commands ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4155](https://github.com/clap-rs/clap/issues/4155)) - *(help)* Trim extra whitespace to avoid artifacts from different uses of templates ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4156](https://github.com/clap-rs/clap/issues/4156)) - *(help)* Hint to the user the difference between `-h` / `--help` when applicable ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4159](https://github.com/clap-rs/clap/issues/4159)) - *(help)* Shorten help by eliding name/version/author ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4160](https://github.com/clap-rs/clap/issues/4160)) - *(help)* When short help is long enough to activate `next_line_help`, don't add blank lines ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4190](https://github.com/clap-rs/clap/issues/4190)) - *(help)* Make help output more dense (reducing horizontal whitespace) ([#&#8203;4132](https://github.com/clap-rs/clap/issues/4132), [#&#8203;4192](https://github.com/clap-rs/clap/issues/4192)) - *(help)* Separate subcommand flags with "," like option flags ([#&#8203;4232](https://github.com/clap-rs/clap/issues/4232), [#&#8203;4235](https://github.com/clap-rs/clap/issues/4235)) - *(help)* Quote the suggested help flag ([#&#8203;4220](https://github.com/clap-rs/clap/issues/4220)) - *(version)* Use `Command::display_name` rather than `Command::bin_name` ([#&#8203;3966](https://github.com/clap-rs/clap/issues/3966)) - *(parser)* Always fill in `""` argument for external subcommands ([#&#8203;3263](https://github.com/clap-rs/clap/issues/3263)) - *(parser)* Short flags now have higher precedence than hyphen values with `Arg::allow_hyphen_values`, like `Command::allow_hyphen_values` ([#&#8203;4187](https://github.com/clap-rs/clap/issues/4187)) - *(parser)* Prefer `InvalidSubcommand` over `UnknownArgument` in more cases ([#&#8203;4219](https://github.com/clap-rs/clap/issues/4219)) - *(derive)* Detect escaped external subcommands that look like built-in subcommands ([#&#8203;3703](https://github.com/clap-rs/clap/issues/3703)) - *(derive)* Leave `Arg::id` as `verbatim` casing ([#&#8203;3282](https://github.com/clap-rs/clap/issues/3282)) - *(derive)* Default to `#[clap(value_parser, action)]` instead of `#[clap(parse)]` ([#&#8203;3827](https://github.com/clap-rs/clap/issues/3827)) </details> --- ### 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. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4yMjQuMCIsInVwZGF0ZWRJblZlciI6IjMyLjIyNC4wIn0=-->
pierre added 1 commit 2022-10-08 00:35:59 +00:00
Update Rust crate clap to v4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
9e383fc7cf
pierre merged commit f0fec7564c into master 2022-10-08 12:55:19 +00:00
pierre deleted branch renovate/clap-4.x 2022-10-08 12:55:19 +00:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: pierre/tcp-over-http#9
No description provided.