All Versions
273
Latest Version
Avg Release Cycle
3 days
Latest Release
749 days ago

Changelog History
Page 5

  • v3.2.7 Changes

    June 28, 2022

    ๐Ÿ›  Fixes

    • Global arguments should override env-sourced arguments
  • v3.2.6 Changes

    June 21, 2022

    ๐Ÿ›  Fixes

    • ๐Ÿ“œ Don't panic when parsing --=
  • v3.2.5 Changes

    June 15, 2022

    ๐Ÿ›  Fixes

    • (derive) Fix regression with #[clap(default_value_os_t ...)] introduced in v3.2.3
  • v3.2.4 Changes

    June 14, 2022

    ๐Ÿ›  Fixes

    • (derive) Provide more clearer deprecation messages for #[clap(parse)] attribute (#3832)
  • v3.2.3 Changes

    June 14, 2022

    ๐Ÿ›  Fixes

    • ๐Ÿšš Moved deprecations to be behind the deprecated Cargo.toml feature (#3830)
      • For now, it is disabled by default though we are considering enabling it by default as we release the next major version to help draw attention to the deprecation migration path
  • v3.2.2 Changes

    June 14, 2022

    ๐Ÿ›  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

    June 13, 2022
  • v3.2.0 Changes

    June 13, 2022

    Compatibility

    MSRV is now 1.56.0 (#3732)

    Behavior

    • 0๏ธโƒฃ 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 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 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 OsStrs
      • 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)
    • 0๏ธโƒฃ SplitArg::default_value / Arg::env on value delimiters independent of whether -- was used (#3765)
    • ๐Ÿ‘ Allow applying defaults to flags (#3294, 3775)
    • 0๏ธโƒฃ Defaults no longer satisfy required and its variants (#3793)
  • v3.1.18 Changes

    May 10, 2022

    ๐Ÿ›  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)
  • v3.1.17 Changes

    May 06, 2022

    ๐Ÿ›  Fixes

    • ๐Ÿ‘ Allow value names for arg! macro to have dashes when quoted, like longs