All Versions
273
Latest Version
Avg Release Cycle
3 days
Latest Release
749 days ago
Changelog History
Page 5
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
--=
- ๐ 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
- (derive) Fix regression with
-
v3.2.4 Changes
June 14, 2022๐ Fixes
- (derive) Provide more clearer deprecation messages for
#[clap(parse)]
attribute (#3832)
- (derive) Provide more clearer deprecation messages for
-
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
- ๐ Moved deprecations to be behind the
-
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, 2022Compatibility
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}
toclap::builder::{PossibleValue, ValueHint}
- ๐
clap::{Indices, OsValues, ValueSource, Values}
toclap::parser::{Indices, OsValues, ValueSource, Values}
clap::ArgEnum
toclap::ValueEnum
(#3799)
Replaced
Arg::allow_invalid_utf8
withArg::value_parser(value_parser!(PathBuf))
(#3753)Arg::validator
/Arg::validator_os
withArg::value_parser
(#3753)- ๐
Arg::validator_regex
with users providing their ownbuilder::TypedValueParser
(#3756) Arg::forbid_empty_values
withbuilder::NonEmptyStringValueParser
/builder::PathBufValueParser
(#3753)Arg::possible_values
withArg::value_parser([...])
,builder::PossibleValuesParser
, orbuilder::EnumValueParser
(#3753)Arg::max_occurrences
witharg.action(ArgAction::Count).value_parser(value_parser!(u8).range(..N))
for flags (#3797)Arg::multiple_occurrences
withArgAction::Append
orArgAction::Count
though positionals will needArg::multiple_values
(#3772, #3797)Command::args_override_self
withArgAction::Set
(#2627, #3797)- ๐
AppSettings::NoAutoVersion
withArgAction
orCommand::disable_version_flag
(#3800) AppSettings::NoHelpVersion
withArgAction
orCommand::disable_help_flag
/Command::disable_help_subcommand
(#3800)ArgMatches::{value_of, value_of_os, value_of_os_lossy, value_of_t}
withArgMatches::{get_one,remove_one}
(#3753)ArgMatches::{values_of, values_of_os, values_of_os_lossy, values_of_t}
withArgMatches::{get_many,remove_many}
(#3753)ArgMatches::is_valid_arg
withArgMatches::{try_get_one,try_get_many}
(#3753)ArgMatches::occurrences_of
withArgMatches::value_source
orArgAction::Count
(#3797)ArgMatches::is_present
withArgMatches::contains_id
orArgAction::SetTrue
(#3797)ArgAction::StoreValue
withArgAction::Set
orArgAction::Append
(#3797)ArgAction::IncOccurrences
withArgAction::SetTrue
orArgAction::Count
(#3797)- (derive)
#[clap(parse(...))]
replaced with: (#3589, #3794)- For default parsers (no
parse
attribute), deprecation warnings can be silenced by opting into the new behavior by adding either#[clap(action)]
or#[clap(value_parser)]
(ie requesting the default behavior for these attributes). Alternatively, theunstable-v4
feature changes the default away fromparse
toaction
/value_parser
. - For
#[clap(parse(from_flag))]
replaced with#[clap(action = ArgAction::SetTrue)]
(#3794) - For
#[clap(parse(from_occurrences))]
replaced with#[clap(action = ArgAction::Count)]
though the field's type must beu8
(#3794) - For
#[clap(parse(from_os_str)]
forPathBuf
, replace it with#[clap(value_parser)]
(as mentioned earlier this will callvalue_parser!(PathBuf)
which will auto-select the rightValueParser
automatically). - For
#[clap(parse(try_from_str = ...)]
, replace it with#[clap(value_parser = ...)]
- For most other cases, a type implementing
TypedValueParser
will be needed and specify it with#[clap(value_parser = ...)]
- For default parsers (no
๐ Features
- ๐ Parsed, typed arguments via
Arg::value_parser
/ArgMatches::{get_one,get_many}
(#2683, #3732)- Several built-in
TypedValueParser
s available with an API open for expansion value_parser!(T)
macro for selecting a parser for a given type (#3732) and open to expansion via theValueParserFactory
trait (#3755)[&str]
is implicitly a value parser for possible values- All
ArgMatches
getters do not assume required arguments (#2505) - Add
ArgMatches::remove_*
variants to transfer ownership - Add
ArgMatches::try_*
variants to avoid panics for developer errors (#3621) - Add a
get_raw
to access the underlyingOsStr
s PathBuf
value parsers implyValueHint::AnyPath
for completions (#3732)
- Several built-in
- ๐ Explicit control over parsing via
Arg::action
(#3774)ArgAction::StoreValue
: existingtakes_value(true)
behaviorArgAction::IncOccurrences
: existingtakes_value(false)
behaviorArgAction::Help
: existing--help
behaviorArgAction::Version
: existing--version
behaviorArgAction::Set
: Overwrite existing values (likeArg::multiple_occurrences
mixed withCommand::args_override_self
) (#3777)ArgAction::Append
: likeArg::multiple_occurrences
(#3777)ArgAction::SetTrue
: Treat--flag
as--flag=true
(#3775)- Implies
Arg::default_value("false")
(#3786) - Parses
Arg::env
viaArg::value_parser
ArgAction::SetFalse
: Treat--flag
as--flag=false
(#3775)- Implies
Arg::default_value("true")
(#3786) - Parses
Arg::env
viaArg::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
viaArg::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 byvalue_parser!
(#3199, #3496) - Default
ArgAction
is determine by a hard-coded lookup on the type (#3794)
- Default
Command::multicall
is now stable for busybox-like programs and REPLs (#2861, #3684)ArgMatches::{try_,}contains_id
for checking if there are values for an argument that mirrors the newget_{one,many}
API
๐ Fixes
- Don't correct argument id in
default_value_ifs_os
(#3815)
๐ parser
- Set
ArgMatches::value_source
andArgMatches::occurrences_of
for external subcommands (#3732) - Use value delimiter for
Arg::default_missing_values
(#3761, #3765) - 0๏ธโฃ Split
Arg::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)
- 0๏ธโฃ Defaults no longer satisfy
-
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 enoughvalue_names
are supplied
gated behind
unstable-v4
- ๐ Verify
required
is not used with conditional required settings (#3660) - Disallow more
value_names
thannumber_of_values
(#2695) - ๐ (parser) Assert on unknown args when using external subcommands (#3703)
- ๐ (parser) Always fill in
""
argument for external subcommands (#3263) - (derive) Detect escaped external subcommands that look like built-in subcommands (#3703)
- (derive) Leave
Arg::id
asverbatim
casing (#3282)
- ๐ Fix deprecated
-
v3.1.17 Changes
May 06, 2022๐ Fixes
- ๐ Allow value names for
arg!
macro to have dashes when quoted, like longs
- ๐ Allow value names for