Change Log
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
5.0.0 - 2022-11-24
Breaking Changes
- Made
ArgPredicate
non_exhaustive
- (help) Change default
Command::term_width
to “source format” - (help) Change default
Command::max_term_width
to 100 - (derive)
Vec<Vec<T>>
types are now assuming to capture occurrences
Features
- (derive) Group values by their occurrence with
Vec<Vec<T>>
4.5.28 - 2025-02-03
Features
- (derive) Unstable support for full markdown syntax for doc comments, enabled with
unstable-markdown
4.5.27 - 2025-01-20
Documentation
- Iterate on tutorials and reference based on feedback
4.5.26 - 2025-01-09
Fixes
- (error) Reduce binary size with the
suggestions
feature
4.5.25 - 2025-01-09
Fixes
- (help) Reduce binary size
4.5.24 - 2025-01-07
Fixes
- (parser) Correctly handle defaults with
ignore_errors(true)
and when a suggestion is provided for an unknown argument
4.5.23 - 2024-12-05
Fixes
- (parser) When check
allow_negative_numbers
, allow E
again
4.5.22 - 2024-12-03
Fixes
- (assert) Catch bugs with arguments requiring themself
4.5.21 - 2024-11-13
Fixes
- (parser) Ensure defaults are filled in on error with
ignore_errors(true)
4.5.20 - 2024-10-08
Features
- (unstable) Add
CommandExt
4.5.19 - 2024-10-01
Internal
4.5.18 - 2024-09-20
Features
- (builder) Expose
Arg::get_display_order
and Command::get_display_order
4.5.17 - 2024-09-04
Fixes
- (help) Style required argument groups
- (derive) Improve error messages when unsupported fields are used
4.5.16 - 2024-08-15
Fixes
- (derive) Improve error messages when
derive
feature is missing
4.5.15 - 2024-08-10
Compatiblity
- (unstable-ext)
Arg::remove
changed return types
Fixes
- (unstable-ext) Make
Arg::remove
return the removed item
4.5.14 - 2024-08-08
Features
- (unstable-ext) Added
Arg::add
for attaching arbitrary state, like completion hints, to Arg
without Arg
knowing about it
4.5.13 - 2024-07-31
Fixes
- (derive) Improve error message when
#[flatten]
ing an optional #[group(skip)]
- (help) Properly wrap long subcommand descriptions in help
4.5.12 - 2024-07-31
4.5.11 - 2024-07-25
4.5.10 - 2024-07-23
4.5.9 - 2024-07-09
Fixes
- (error) When defining a custom help flag, be sure to suggest it like we do the built-in one
4.5.8 - 2024-06-28
Fixes
4.5.7 - 2024-06-10
Fixes
- Clean up error message when too few arguments for
num_args
4.5.6 - 2024-06-06
4.5.5 - 2024-06-06
Fixes
- Allow
exclusive
to override required_unless_present
, required_unless_present_any
, required_unless_present_all
4.5.4 - 2024-03-25
Fixes
- (derive) Allow non-literal
#[arg(id)]
attributes again
4.5.3 - 2024-03-15
Internal
4.5.2 - 2024-03-06
Fixes
- (macros) Silence a warning
4.5.1 - 2024-02-16
Fixes
- (error) Include suggestion to add
--
even if there is a “did you mean” so long as last
or trailing_var_arg
is used
4.5.0 - 2024-02-08
Compatibility
4.4.18 - 2024-01-16
Fixes
- (error) When lacking
usage
feature, ensure the list of required arguments is unique
4.4.17 - 2024-01-15
Fixes
- Fix
panic!
when mixing args_conflicts_with_subcommands
with ArgGroup
(which is implicit with derive
) introduced in 4.4.15
4.4.16 - 2024-01-12
Fixes
- Ensure invalid escape sequences in user-defined strings are correctly stripped when terminal doesn't support color
4.4.15 - 2024-01-11
Fixes
- Improve error for
args_conflicts_with_subcommands
- Ensure we error for
args_conflicts_with_subcommands
when using subcommand short and long flags
4.4.14 - 2024-01-08
Documentation
- Fix
find
cookbook entry to allow repeats of flags/options
Features
- Allow
num_args(0)
on options which allows making them emulate being a flag for position-tracking flags
4.4.13 - 2024-01-04
Documentation
- Fix link to structopt migration guide
4.4.12 - 2023-12-28
Performance
- Only ask
TypedValueParser
for possible values if needed
4.4.11 - 2023-12-04
Features
4.4.10 - 2023-11-28
Documentation
- Link out to changelog
- Cross link derive's attribute reference to derive tutorial
4.4.9 - 2023-11-27
Fixes
- (help) Show correct
Command::about
under flattened headings - (help) Respect
hide
when flattening subcommands
4.4.8 - 2023-11-10
Features
- Add
Command::flatten_help
to allow git stash -h
like help for subcommands
4.4.7 - 2023-10-24
Performance
4.4.6 - 2023-09-28
Internal
4.4.5 - 2023-09-25
Fixes
- (parser) When inferring subcommand
name
or long_flag
, allow ambiguous-looking matches that unambiguously map back to the same command - (parser) When inferring subcommand
long_flag
, don't panic - (assert) Clarify what action is causing a positional that doesn't set values which is especially useful for derive users
4.4.4 - 2023-09-18
Internal
- Update
terminal_size
to 0.3
4.4.3 - 2023-09-12
Documentation
- (derive) Clarify use of attributes within the tutorial
- Split sections in the builder and derive tutorials into separate modules
4.4.2 - 2023-08-31
Performance
- Improve build times by removing
once_cell
dependency
4.4.1 - 2023-08-28
Features
- Stabilize
Command::styles
4.4.0 - 2023-08-24
compatibility
4.3.24 - 2023-08-23
Fixes
- Ensure column padding is preserved in
--help
with custom templates
4.3.23 - 2023-08-18
Fixes
- Fixed
UnknownArgumentValueParser
to not error on flag's absence
4.3.22 - 2023-08-17
Features
- Add
UnknownArgumentValueParser
for injecting errors for improving the experience with errors
4.3.21 - 2023-08-08
Features
- Expose
TryMapValueParser
so the type can be named
4.3.20 - 2023-08-08
Features
Command::mut_args
for modifying all arguments en masse
4.3.19 - 2023-07-21
Fixes
- (parse) Respect
value_terminator
even in the presence of later multiple-value positional arguments
4.3.18 - 2023-07-21
Fixes
- (parse) Suggest
--
in fewer places where it won't work
4.3.17 - 2023-07-19
Fixes
- (help) Address a regression in wrapping
PossibleValue
descriptions in --help
4.3.16 - 2023-07-18
Fixes
- Don't assert when stateful value parsers fail on defaults (e.g. checking if a path exists)
4.3.15 - 2023-07-18
Features
- (unstable-styles) Re-export
anstyle
Documentation
- (unstable-styles) Provide more examples
4.3.14 - 2023-07-17
Features
ArgAction::HelpShort
and ArgAction::HelpLong
for explicitly specifying which style of help to display
Fixes
- Skip
[OPTIONS]
in usage if a help or version ArgAction
is used
4.3.13 - 2023-07-17
4.3.12 - 2023-07-14
Fixes
- (derive) Don't error on enum variant field attributes
4.3.11 - 2023-07-05
Features
- (derive) Support fields wrapped in
num::Wrapping
, Box
, or Arc
- (derive) Support
Box<str>
, Box<OsStr>
, and Box<Path>
4.3.10 - 2023-06-30
Performance
- Drop a dependency, reducing binary size by 1.3 KiB
4.3.9 - 2023-06-28
Fixes
Command::ignore_errors
no longer masks help/version
4.3.8 - 2023-06-23
Fixes
- Error on ambiguity with
infer_long_arg
, rather than arbitrarily picking one, matching the documentation and subcommand's behavior
4.3.7 - 2023-06-23
Documentation
- Further clarify magic behavior in derive tutorial
- Further clarify derive API's relationship to builder within the tutorial
4.3.6 - 2023-06-23
Documentation
4.3.5 - 2023-06-20
ColorChoice::possible_values
is added to simplify things for builder users
Fixes
ColorChoice::to_possible_value
no longer includes descriptions, encouraging shorter help where possible
4.3.4 - 2023-06-14
Features
4.3.3 - 2023-06-09
Features
Command::defer
for delayed initialization of subcommands to reduce startup times of large applications like deno
4.3.2 - 2023-06-05
Fixes
- (derive) Don't produce
unused_equalifications
warnings when someone brings a clap type into scope
4.3.1 - 2023-06-02
Performance
- (derive) Reduce the amount of generated code
4.3.0 - 2023-05-19
Fixes
- (assert) Allow multiple, value-terminated, positional arguments
- (assert) Clear up language on
last
assertion - (parser) Correctly assign values to arguments when using multiple, value-termianted, positional arguments
- (parser) Ensure
value_terminator
has higher precedence than allow_hyphen_values
- (help) Only use next-line-help on subcommand list when explicitly specified, not just with
--help
- (help) Correctly align possible values list
- (help) Don't waste code, vertical space in moving possible value descriptions to next line
4.2.7 - 2023-05-02
Fixes
- Correctly track remaining length for iterators provided by
ArgMatches
4.2.6 - 2023-05-02
Features
impl Eq<std::any::TypeId> for clap_builder::util::AnyValueId
4.2.5 - 2023-04-27
Fixes
- Improve panic when a group requires a non-existent ID
4.2.4 - 2023-04-19
Documentation
- Corrected docs for
Command::style
4.2.3 - 2023-04-18
Features
Command::styles
for theming help/errors (behind unstable-styles
)
4.2.2 - 2023-04-13
Internal
4.2.1 - 2023-03-28
Fixes
- Don't highlight uninteresting parts of the error message
4.2.0 - 2023-03-28
Compatibility
- Removed the languishing
unstable-replace
feature (open to discussion at #2836) - Removed the stablized
unstable-grouped
feature
Features
- Allow any
StyledStr
to accept text styled with ANSI escape codes - Respect
CLICOLOR
, CLICOLOR_FORCE
Fixes
- Lighten the tone for “unexpected argument” errors (open to discussion at #4638)
4.1.14 - 2023-03-28
Features
- (derive)
#[group]
raw attribute support
Performance
- (derive)
clap_builder
was pulled out of clap
so it could build in parallel to clap_derive
os_str_bytes
dependency was removed for faster builds and smaller binaries
4.1.13 - 2023-03-18
Performance
- Reduce repeated alloc calls when building a
Command
- Reduce duplicate dependencies for faster builds
4.1.12 - 2023-03-18
Internal
- (derive) Update to
syn
v2
Performance
- (derive) Faster build times by dropping
proc-macro-error
dependency
4.1.11 - 2023-03-17
Internal
4.1.10 - 2023-03-17
Fixes
- (help) On Windows, avoid underlined text artifacts
4.1.9 - 2023-03-16
Fixes
- (assert) Improve the assert when using the wrong action with
get_count
/ get_flag
4.1.8 - 2023-02-27
Fixes
- (derive) Don't
deny
lints on the users behalf
4.1.7 - 2023-02-27
Fixes
- (derive) Hide some nightly clippy warnings
4.1.6 - 2023-02-15
Fixes
- (help) Don't show long help for
--help
just because hidden possible values include a description
4.1.5 - 2023-02-15
Fixes
- (help) Don't show long help for
--help
just because a hidden arg has a possible value with a description
4.1.4 - 2023-01-24
Fixes
- (help) Respect
disable_colored_help
when using arg_required_else_help
Performance
- Speed up compiling
arg!
macro
4.1.3 - 2023-01-23
Fixes
- (error) Improve suggested flag/value/subcommand when two share a long preifx
- (error) When suggesting one of several subcommands, use the plural
subcommands
, rather than subcommand
4.1.2 - 2023-01-23
Fixes
- In documentation, refer to
get_flag
, rather than get_one::<bool>
4.1.1 - 2023-01-14
Fixes
- (error) Small softening attempt for “unexpected argument” error
4.1.0 - 2023-01-13
Compatibility
MSRV changed to 1.64.0
For apps with custom --help
and --version
flags:
- Descriptions for
--help
and --version
changed
When apps have errors imitating clap's error style:
- Error message style was changed, including
- Moving away from “did you mean” to tips
- Leading letter is lower case
- “For more” added some punctuation
Features
ArgMatches::get_occurrences
support for argument values to be grouped by their occurrence
Fixes
- (derive) Allow
upgrade_from
when arguments / subcommands are explicitly marked as required - (help) Try be more clearer and succinct with
--help
and --version
(also helps with overflow) - (error) Try to be more clearer and succinct with error messages
- (error) Officially adopt an error style guide
4.0.32 - 2022-12-22
Fixes
- (parser) When overriding
required(true)
, consider args that conflict with its group
4.0.31 - 2022-12-22
Performance
- Speed up parsing when a lot of different flags are present (100 unique flags)
4.0.30 - 2022-12-21
Fixes
- (error) Improve error for
args_conflicts_with_subcommand
4.0.29 - 2022-11-29
4.0.28 - 2022-11-29
Fixes
- Fix wasm support which was broken in 4.0.27
4.0.27 - 2022-11-24
Features
- Have
Arg::value_parser
accept Vec<impl Into<PossibleValue>>
- Implement
Display
and FromStr
for ColorChoice
Fixes
- Remove soundness issue by switching from
atty
to is-terminal
4.0.26 - 2022-11-16
Fixes
- (error) Fix typos in
ContextKind::as_str
4.0.25 - 2022-11-15
Features
- (error) Report available subcommands when required subcommand is missing
4.0.24 - 2022-11-14
Fixes
- Avoid panic when printing an argument that isn't built
4.0.23 - 2022-11-11
Fixes
- Don't panic on reporting invalid-long errors when followed by invalid UTF8
- (help) Clarified argument to
help
subcommand
4.0.22 - 2022-11-07
Fixes
- (help) Don't overflow into next-line-help early due to stale (pre-v4) padding calculations
4.0.21 - 2022-11-07
Features
- (derive)
long_about
and long_help
attributes, without a value, force using doc comment (before it wouldn‘t be set if there wasn’t anything different than the short help)
4.0.20 - 2022-11-07
Fixes
- (derive) Allow defaulted value parser for ‘()’ fields
4.0.19 - 2022-11-04
Features
ColorChoice
now implements ValueEnum
4.0.18 - 2022-10-20
Fixes
- (derive) Allow
#[command(skip)]
to also work with enum variants with a value
4.0.17 - 2022-10-18
Fixes
- Allow using
Arg::last(true)
with Arg::value_hint(ValueHint::CommandWithArguments)
4.0.16 - 2022-10-18
Fixes
Arg::exclusive(true)
should not be exclusive with the argument's own ArgGroup
4.0.15 - 2022-10-13
Fixes
- (error) Don‘t suggest
--
when it doesn’t help - (error) Be more consistent in quoting, punctuation, and indentation in errors
4.0.14 - 2022-10-12
Fixes
- Only put
ArgGroup
in ArgMatches
when explicitly specified, fixing derives handling of option-flattened fields (#4375)
4.0.13 - 2022-10-11
Features
- (derive) Allow
()
for fields to mean “don't read” (#4371)
4.0.12 - 2022-10-10
Features
- Added
TypedValueParser::try_map
for when adapting an existing TypedValueParser
can fail - (error) Create errors like clap with
Error::new
, Error::with_cmd
, and Error::insert
4.0.11 - 2022-10-09
Fixes
- (help) Fix wrapping calculations with ANSI escape codes
4.0.10 - 2022-10-05
Features
- (derive) Support
#[arg(flatten)]
on Option
types (#4211, #4350)
4.0.9 - 2022-10-03
Fixes
- (derive) Process doc comments for
#[command(subcommand)]
like in clap v3
4.0.8 - 2022-10-01
Fixes
- (derive) Remove a low-value assert preventing defaulting
Help
and Version
actions
4.0.7 - 2022-09-30
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
4.0.6 - 2022-09-30
Features
- (derive) Support
#[group(skip)]
(#4279, #4301)
4.0.5 - 2022-09-30
4.0.4 - 2022-09-29
Fixes
- (error) Specialize the self-conflict error to look like clap v3
4.0.3 - 2022-09-29
Fixes
- (error) Quote literals consistently
- (error) Stylize escape (
--
) suggestions - (error) Format help flag as a literal
4.0.2 - 2022-09-28
Fixes
- (parser)
SetFalse
should conflict with itself like SetTrue
and Set
- (parser) Allow one-off overrides
4.0.1 - 2022-09-28
Fixes
- (derive) Ensure
#[clap(...)]
attribute still works
4.0.0 - 2022-09-28
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:
- Upgrade to v3 if you haven't already
- Add CLI tests (including example below),
-h
and --help
output at a minimum (recommendation: trycmd for snapshot testing) - If using Builder API: Explicitly set the
arg.action(ArgAction::...)
on each argument (StoreValue
for options and IncOccurrences
for flags) - Run
cargo check --features clap/deprecated
and resolve all deprecation warnings - Upgrade to v4
- 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
- Resolve compiler errors
- Resolve behavior changes (see “subtle changes” under BREAKING CHANGES)
- 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
Arg
s 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 String
s (#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 Id
s, 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
moduleErrorKind::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 thingArg::requires_all
in favor of Arg::requires_ifs
now that it takes an ArgPredicate
to avoid having multiple ways of doing the same thingArg::number_of_values
in favor of Arg::num_args
to clarify semantic differencesdefault_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_parser
s 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::render
for 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
OsStr
s 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)
3.2.18 - 2022-08-29
Fixes
- (help)
Command::print_help
now respects Command::colored_help
- (derive) Improved error messages
3.2.17 - 2022-08-12
Fixes
- (derive) Expose
#[clap(id = ...)]
attribute to match Arg's latest API
3.2.16 - 2022-07-30
Fixes
- Ensure required arguments appear in errors when they are also members of a group (#4004)
3.2.15 - 2022-07-25
Features
- (derive) New
default_values_t
and default_values_os_t
attributes
3.2.14 - 2022-07-21
Fixes
- A
multiple_values
positional followed by another positional now works with multiple flags
3.2.13 - 2022-07-19
Documentation
- Pulled in tutorials, cookbook, and derive reference into rustdoc
3.2.12 - 2022-07-14
Fixes
- Allow an arg to declare a conflict with a group
3.2.11 - 2022-07-13
Features
- Added
Arg::get_all_short_aliaes
and Arg::get_all_aliases
3.2.10 - 2022-07-12
Fixes
- Loosen lifetime on
Command::mut_subcommand
3.2.8 - 2022-06-30
Features
- Added
Command::mut_subcommand
to mirror Command::mut_arg
3.2.7 - 2022-06-28
Fixes
- Global arguments should override env-sourced arguments
3.2.6 - 2022-06-21
Fixes
- Don't panic when parsing
--=
3.2.5 - 2022-06-15
Fixes
- (derive) Fix regression with
#[clap(default_value_os_t ...)]
introduced in v3.2.3
3.2.4 - 2022-06-14
Fixes
- (derive) Provide more clearer deprecation messages for
#[clap(parse)]
attribute (#3832)
3.2.3 - 2022-06-14
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
3.2.2 - 2022-06-14
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)
3.2.1 - 2022-06-13
3.2.0 - 2022-06-13
Compatibility
MSRV is now 1.56.0 (#3732)
Behavior
- Defaults no longer satisfy
required
and its variants (#3793) - When misusing
ArgMatches::value_of
and friends, debug asserts were turned into panics
Moving (old location deprecated)
clap::{PossibleValue, ValueHint}
to clap::builder::{PossibleValue, ValueHint}
clap::{Indices, OsValues, ValueSource, Values}
to clap::parser::{Indices, OsValues, ValueSource, Values}
clap::ArgEnum
to clap::ValueEnum
(#3799)
Replaced
Arg::allow_invalid_utf8
with Arg::value_parser(value_parser!(PathBuf))
(#3753)Arg::validator
/ Arg::validator_os
with Arg::value_parser
(#3753)Arg::validator_regex
with users providing their own builder::TypedValueParser
(#3756)Arg::forbid_empty_values
with builder::NonEmptyStringValueParser
/ builder::PathBufValueParser
(#3753)Arg::possible_values
with Arg::value_parser([...])
, builder::PossibleValuesParser
, or builder::EnumValueParser
(#3753)Arg::max_occurrences
with arg.action(ArgAction::Count).value_parser(value_parser!(u8).range(..N))
for flags (#3797)Arg::multiple_occurrences
with ArgAction::Append
or ArgAction::Count
though positionals will need Arg::multiple_values
(#3772, #3797)Command::args_override_self
with ArgAction::Set
(#2627, #3797)AppSettings::NoAutoVersion
with ArgAction
or Command::disable_version_flag
(#3800)AppSettings::NoHelpVersion
with ArgAction
or Command::disable_help_flag
/ Command::disable_help_subcommand
(#3800)ArgMatches::{value_of, value_of_os, value_of_os_lossy, value_of_t}
with ArgMatches::{get_one,remove_one}
(#3753)ArgMatches::{values_of, values_of_os, values_of_os_lossy, values_of_t}
with ArgMatches::{get_many,remove_many}
(#3753)ArgMatches::is_valid_arg
with ArgMatches::{try_get_one,try_get_many}
(#3753)ArgMatches::occurrences_of
with ArgMatches::value_source
or ArgAction::Count
(#3797)ArgMatches::is_present
with ArgMatches::contains_id
or ArgAction::SetTrue
(#3797)ArgAction::StoreValue
with ArgAction::Set
or ArgAction::Append
(#3797)ArgAction::IncOccurrences
with ArgAction::SetTrue
or ArgAction::Count
(#3797)- (derive)
#[clap(parse(...))]
replaced with: (#3589, #3794)- For default parsers (no
parse
attribute), deprecation warnings can be silenced by opting into the new behavior by adding either #[clap(action)]
or #[clap(value_parser)]
(ie requesting the default behavior for these attributes). Alternatively, the unstable-v4
feature changes the default away from parse
to action
/value_parser
. - For
#[clap(parse(from_flag))]
replaced with #[clap(action = ArgAction::SetTrue)]
(#3794) - For
#[clap(parse(from_occurrences))]
replaced with #[clap(action = ArgAction::Count)]
though the field's type must be u8
(#3794) - For
#[clap(parse(from_os_str)]
for PathBuf
, replace it with #[clap(value_parser)]
(as mentioned earlier this will call value_parser!(PathBuf)
which will auto-select the right ValueParser
automatically). - For
#[clap(parse(try_from_str = ...)]
, replace it with #[clap(value_parser = ...)]
- For most other cases, a type implementing
TypedValueParser
will be needed and specify it with #[clap(value_parser = ...)]
Features
- Parsed, typed arguments via
Arg::value_parser
/ ArgMatches::{get_one,get_many}
(#2683, #3732)- Several built-in
TypedValueParser
s available with an API open for expansion value_parser!(T)
macro for selecting a parser for a given type (#3732) and open to expansion via the ValueParserFactory
trait (#3755)[&str]
is implicitly a value parser for possible values- All
ArgMatches
getters do not assume required arguments (#2505) - Add
ArgMatches::remove_*
variants to transfer ownership - Add
ArgMatches::try_*
variants to avoid panics for developer errors (#3621) - Add a
get_raw
to access the underlying OsStr
s PathBuf
value parsers imply ValueHint::AnyPath
for completions (#3732)
- Explicit control over parsing via
Arg::action
(#3774)ArgAction::StoreValue
: existing takes_value(true)
behaviorArgAction::IncOccurrences
: existing takes_value(false)
behaviorArgAction::Help
: existing --help
behaviorArgAction::Version
: existing --version
behaviorArgAction::Set
: Overwrite existing values (like Arg::multiple_occurrences
mixed with Command::args_override_self
) (#3777)ArgAction::Append
: like Arg::multiple_occurrences
(#3777)ArgAction::SetTrue
: Treat --flag
as --flag=true
(#3775)- Implies
Arg::default_value("false")
(#3786) - Parses
Arg::env
via Arg::value_parser
ArgAction::SetFalse
: Treat --flag
as --flag=false
(#3775)- Implies
Arg::default_value("true")
(#3786) - Parses
Arg::env
via Arg::value_parser
ArgAction::Count
: Treat --flag --flag --flag
as --flag=1 --flag=2 --flag=3
(#3775)- Implies
Arg::default_value("0")
(#3786) - Parses
Arg::env
via Arg::value_parser
- (derive) Opt-in to new
Arg::value_parser
/ Arg::action
with either #[clap(value_parser)]
(#3589, #3742) / #[clap(action)]
attributes (#3794)- Default
ValueParser
is determined by value_parser!
(#3199, #3496) - Default
ArgAction
is determine by a hard-coded lookup on the type (#3794)
Command::multicall
is now stable for busybox-like programs and REPLs (#2861, #3684)ArgMatches::{try_,}contains_id
for checking if there are values for an argument that mirrors the new get_{one,many}
API
Fixes
- Don't correct argument id in
default_value_ifs_os
(#3815)
parser
- Set
ArgMatches::value_source
and ArgMatches::occurrences_of
for external subcommands (#3732) - Use value delimiter for
Arg::default_missing_values
(#3761, #3765) - Split
Arg::default_value
/ Arg::env
on value delimiters independent of whether --
was used (#3765) - Allow applying defaults to flags (#3294, 3775)
- Defaults no longer satisfy
required
and its variants (#3793)
3.1.18 - 2022-05-10
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)
3.1.17 - 2022-05-06
Fixes
- Allow value names for
arg!
macro to have dashes when quoted, like longs
3.1.16 - 2022-05-06
Fixes
- (parser)
Arg::exclusive
overrides Arg::required
, like other conflicts - (error) Don't duplicate arguments in usage
- (error) Don't show hidden arguments in conflict error usage
- (help) New
help_template
variable {name}
to fix problems with {bin}
- (help) Don't wrap URLs
gated behind unstable-v4
- Leading dashes in
Arg::long
are no longer allowed - (help) Use
Command::display_name
in the help title rather than Command::bin_name
3.1.15 - 2022-05-02
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
3.1.14 - 2022-05-01
Fixes
- Panic when calling
Command::build
with a required positional argument nested several layers in subcommands
3.1.13 - 2022-04-30
Fixes
- Help subcommand and
Command::write_help
now report required arguments in usage in more circumstances - Unknown subcommand for help subcommand flag now reports an error with more context
- More details reported when using
debug
feature - Allow disabling
color
feature with debug
feature enabled
3.1.12 - 2022-04-22
Fixes
- Regression in 3.1.11 where the (output) streams were crossed
3.1.11 - 2022-04-22
Fixes
- Implied conflicts override
Arg::required
, making the behavior consistent with how we calculate conflicts for error reporting - Members of a mutually exclusive
ArgGroup
override Arg::required
, making the behavior consistent with how we calculate conflicts for error reporting Arg::overrides_with
always override Arg::required
, not just when the parser processes an override
3.1.10 - 2022-04-19
Features
- Expose
Command::build
for custom help generation or other command introspection needs
3.1.9 - 2022-04-15
Fixes
- Pin the
clap_derive
version so a compatible version is always used with clap
3.1.8 - 2022-04-01
Fixes
- Add
Debug
impls to more types
3.1.7 - 2022-03-31
Fixes
- (derive) Abort, rather than ignore, when deriving
ArgEnum
with non-unit unskipped variants
3.1.6 - 2022-03-07
Fixes
- Don't panic when validating delimited defaults (#3541)
- Make it clearer that
cargo
feature is needed - Documentation improvements
3.1.5 - 2022-03-02
Fixes
3.1.4 - 2022-03-02
Features
- (help) Show
PossibleValue::help
in long help (--help
) (gated behind unstable-v4
) (#3312)
3.1.3 - 2022-02-28
Fixes
- Don't panic when validating delimited defaults (#3514)
3.1.2 - 2022-02-23
Fixes
- (derive) Allow other attribute with a subcommand that has subcommands
Documentation
- (examples) List example topics
- (derive) Clarify syntax and relation to builder API
3.1.1 - 2022-02-21
Fixes
- Track caller for
ArgMatches
assertions so the user more easily sees where they need to fix the call
3.1.0 - 2022-02-16
Compatibility
Changes in behavior of note that are not guaranteed to be compatible across releases:
- (help)
help
subcommand shows long help like --help
, rather than short help (-h
), deprecated clap::AppSettings::UseLongFormatForHelpSubcommand
(#3440) - (help) Pacman-style subcommands are now ordered the same as usage errors (#3470)
- (help) Pacman-style subcommands use standard alternate syntax in usage (#3470)
Deprecations
clap::Command
is now preferred over clap::App
(#3089 in #3472)clap::command!
is now preferred over clap::app_from_crate
(#3089 in #3474)clap::CommandFactory::command
is now preferred over clap::IntoApp::into_app
(#3089 in #3473)
- (help)
help
subcommand shows long help like --help
, rather than short help (-h
), deprecated clap::AppSettings::UseLongFormatForHelpSubcommand
(#3440) - (error) Deprecate
clap::AppSettings::WaitOnError
, leaving it to the user to implement - (validation)
clap::Command::subcommand_required(true).arg_required_else_help(true)
is now preferred over clap::AppSettings::SubcommandRequiredElseHelp
(#3280) - (builder)
clap::AppSettings
are nearly all deprecated and replaced with builder methods and getters (#2717) - (builder)
clap::ArgSettings
is deprecated and replaced with builder methods and getters (#2717) - (builder)
clap::Arg::id
and clap::ArgGroup::id
are now preferred over clap::Arg::name
and clap::ArgGroup::name
(#3335) - (help)
clap::Command::next_help_heading
is now preferred over clap::Command::help_heading
(#1807, #1553) - (error)
clap::error::ErrorKind
is now preferred over clap::ErrorKind
(#3395) - (error)
clap::Error::kind()
is now preferred over clap::Error::kind
- (error)
clap::Error::context()
is now preferred over clap::Error::info
(#2628)
Note: All items deprecated in 3.0.0 are now hidden in the documentation. (#3458)
Features
- (matches) Add
clap::ArgMatches::value_source
to determine what insert the value (#1345) - (help) Override derived display order with
clap::Command::next_display_order
(#1807) - (error) Show possible values when an argument doesn't have a value (#3320)
- (error) New
clap::Error::context
API to open the door for fully-custom error messages (#2628)- (error)
clap::error::ErrorKind
now implements Display
Fixes
- (builder) Some functions were renamed for consistency and fixing spelling issues
- (builder) Allow
clap::Command::color
to override previous calls (#3449) - (parse) Propagate globals with multiple subcommands (#3428)
- (validation) Give
ArgRequiredElseHelp
precedence over SubcommandRequired
(#3456) - (validation) Default values no longer count as “present” for conflicts, requires,
clap::Command::arg_required_else_help
, etc (#3076, #1264) - (assert) Report invalid defaults (#3202)
- (help) Clarify how to handle
-h
conflicts (#3403) - (help) Make it easier to debug the addition of help flags (#3425)
- (help) Pacman-style subcommands are now separated with spaces (#3470)
- (help) Pacman-style subcommands are now ordered the same as usage errors (#3470)
- (help) Pacman-style subcommands use standard alternate syntax in usage (#3470)
- (error) Be consistent in showing of required attributes between errors / usage (#3390)
- (error) Show user's order of possible values, like in
--help
(#1549) - (error) Allow customizing error type in
clap::error::Result
(#3395)
Performance
- (error) Reduced stack size of
clap::Error
(#3395)
Documentation
- (builder) Correct data take accepted for
clap::Arg::validator
- (derive) Clarify
parse
attribute - (tutorial) Demonstrate custom parsing
- (example) Consistently list out required feature flags (#3448)
3.0.14 - 2022-02-01
Features
- Added
ArgMatches::args_present()
to check if any args are present - Added
Error::kind()
as we work to deprecate direct member access for Error
- Added
App::get_version
- Added
App::get_long_version
- Added
App::get_author
- Added
App::get_subcommand_help_heading
- Added
App::get_subcommand_value_name
- Added
App::get_after_help
- Added
App::get_after_long_help
Performance
- Misc binary size reductions
3.0.13 - 2022-01-26
Fixes
- Show optional flag values wrapped in
[]
3.0.12 - 2022-01-24
Features
- (derive) Support for
default_value_os_t
3.0.11 - 2022-01-24
Fixes
- Ensure conflicts work when they target a group with a default value
3.0.10 - 2022-01-18
Fixes
- Resolve
panic!
from v3.0.8 when using global_setting(PropagateVersion)
.
3.0.9 - 2022-01-17
Features
- Added
App::find_subcommand_mut
3.0.8 - 2022-01-17
Fixes
- Respected
DisableColoredHelp
on cmd help help
- Provide a little more context when completing arguments for
cmd help
- Provide more context for some asserts
- Small documentation improvements
3.0.7 - 2022-01-12
Fixes
- Shift more asserts from parsing to
App
building (ie will now run in App::debug_assert
)
derive
3.0.6 - 2022-01-10
Fixes
derive
- Don't assume user does
use clap::ArgEnum
(#3277) - Documentation fixes
3.0.5 - 2022-01-05
Fixes
docs:
- Cleaned up code blocks in tutorials (#3261)
- Clean up quotes in
ArgMatches
asserts - List correct replacement for deprecated
Parser::from_clap
(#3257)
3.0.4 - 2022-01-04
Features
- For very limited cases, like
cargo
, expose ArgMatches::is_valid_arg
to avoid panicing on undefined arguments
3.0.3 - 2022-01-04
Fixes
- Specify cause of debug assert failure
3.0.2 - 2022-01-04
Fixes
- Ignore
Last
when checking hyphen values (see #3249 for details) - Help catch bugs with
#[must_use]
3.0.1 - 2022-01-03
Fixes
- Don't panic when getting number of values (#3241)
- Don't warn when using
default_value_t
derive attribute with a Subcommand
(#3245)
Documentation
- Added
name
attribute to ArgEnum
variant derive reference
3.0.0 - 2021-12-31
Note: clap v3 has been in development for several years and has changed hands multiple times. Unfortunately, our changelog might be incomplete, whether in changes or their motivation.
Highlights
A special thanks to the maintainers, contributors, beta users, and sponsors who have helped along this journey, especially kbknapp.
StructOpt Integration
StructOpt provides a serde-like declarative approach to defining your parser. The main benefits we've seen so far from integrating are:
- Tighter feedback between the design of clap and the derives
- More universal traits. Crates exist for common CLI patterns (example) and we‘ve re-designed the
StructOpt
traits so crates built on clap3 can be reused not just with other derives but also people using the builder API. People can even hand implement these so people using the builder API won’t have the pay the cost for derives.
Custom Help Headings
Previously, clap automatically grouped arguments in the help as either ARGS
, FLAGS
, OPTIONS
, and SUBCOMMANDS
.
You can now override the default group with Arg::help_heading
and App::subcommand_help_heading
. To apply a heading to a series of arguments, you can set App::help_heading
.
Deprecations
While a lot of deprecations have been added to clean up the API (overloaded meaning of Arg::multiple
) or make things more consistent, some particular highlights are:
Migrating
From clap v2
- Add CLI tests,
-h
and --help
output at a minimum (recommendation: trycmd for snapshot testing) - Update your dependency
- If you use
no-default-features
: add the std
feature
- Resolve compiler errors
- Resolve behavior changes
- Refactor your
App
creation to a function and add a test similar to the one below, resolving any of its assertions - Look over the “subtle changes” under BREAKING CHANGES
- If using builder: test your application under various circumstances to see if
ArgMatches
asserts regarding AllowInvalidUtf8
.
- At your leisure: resolve deprecation notices
Example test:
fn app() -> clap::App<'static> {
...
}
#[test]
fn verify_app() {
app().debug_assert();
}
From structopt 0.3.25
- Add CLI tests,
-h
and --help
output at a minimum (recommendation: trycmd for snapshot testing) - Replace your dependency from
structopt = "..."
to clap = { version = "3.0", features = ["derive"] }
- If you use
no-default-features
: add the std
feature
- Resolve compiler errors, including
- Update your
use
statements from structopt
and structopt::clap
to clap
- Resolve behavior changes
- Add a test similar to the one below, resolving any of its assertions
- Look over the “subtle changes” under BREAKING CHANGES
- At your leisure: resolve deprecation notices
Example test:
#[derive(clap::StructOpt)]
struct Args {
...
}
#[test]
fn verify_app() {
use clap::IntoApp;
Args::into_app().debug_assert()
}
From clap v3.0.0-beta.5
- Add CLI tests,
-h
and --help
output at a minimum (recommendation: trycmd for snapshot testing) - Update your dependency
- Add in
derive
, env
, cargo
, or unicode
feature flags as needed
- Resolve compiler errors
- If you use
yaml
, clap_app!
, or usage parser: revert any changes you made for clap3 - Change
Arg::about
Arg::long_about
back to help
and long_help
and change PossibleValue::about
to help
(clap-rs/clap#3075) - Change
AppSettings::HelpRequired
to AppSettings::HelpExpected
- Change
PossibleValue::hidden
to PossibleValue::hide
- Change
App::subcommand_placeholder
to App::subcommand_value_name
/ App::subcommand_help_heading
- Resolve behavior changes
- Add the above listed test appropriate for your application and resolve any problems it reports
- If using
derive
: see the structopt breaking changes section for Vec
changes - If using builder: test your application under various circumstances to see if
ArgMatches
asserts regarding AllowInvalidUtf8
.
- At your leisure: resolve deprecation notices
BREAKING CHANGES
From clap 2
Subtle changes (i.e. compiler won't catch):
AppSettings::UnifiedHelpMessage
is now default behaviour{flags}
and {unified}
will assert if present in App::help_template
- See clap-rs/clap#2807
AppSettings::EnableColoredHelp
is now the default behavior but can be opted-out with AppSettings::DisableColoredHelp
(clap-rs/clap#2806)App::override_usage
no longer implies a leading \t
, allowing multi lined usagesArg::require_equals
no longer implies ArgSettings::ForbidEmptyValues
(#2233)Arg::require_delimiter
no longer implies ArgSettings::TakesValue
and ArgSettings::UseValueDelimiter
(#2233)Arg::env
, Arg::env_os
, Arg::last
, Arg::require_equals
, Arg::allow_hyphen_values
, Arg::hide_possible_values
, Arg::hide_default_value
, Arg::hide_env_values
, Arg::case_insensitive
and Arg::multiple_values
no longer imply ArgSettings::TakesValue
(#2233)ArgMatches::is_present
no longer checks subcommand names- Some env variable values are now considered false for flags, not just “not-present” (clap-rs/clap#2539)
- Changed
...
s meaning in usage parser. Before, it always meant multiple
which is still true for --option [val]...
. Now [name]... --option [val]
results in ArgSettings::MultipleOccurrences
. - Usage exit code changed from
1
to 2
(clap-rs/clap#1327) - Reject
--foo=bar
when takes_value(false)
(clap-rs/clap#1543) - No longer accept an arbitrary number of
-
for long arguments (-----long
)
Easier to catch changes:
- When using
no-default-features
, you now have to specify the std
feature (reserved for future work) - Gated env support behind
env
feature flag- Impacts
Arg::env
, Arg::env_os
, Arg::hide_env_values
, ArgSettings::HideEnvValues
- See clap-rs/clap#2694
- Gated crate information behind
cargo
feature flag- Impacts
crate_name!
, crate_version!
, crate_authors!
, crate_description!
, app_from_crate!
AppSettings::StrictUtf8
is now default behaviour and asserts if AppSettings::AllowInvalidUtf8ForExternalSubcommands
and ArgSettings::AllowInvalidUtf8
and ArgMatches::value_of_os
aren't used togetherArg::short
and Arg::value_delimiter
now take a char
instead of a &str
ArgMatches
panics on unknown arguments- Removed
VersionlessSubcommands
, making it the default (see clap-rs/clap#2812) - Completion generation has been split out into clap_complete.
- Removed
ArgSettings::EmptyValues
in favor of ArgSettings::ForbidEmptyValues
- Validator signatures have been loosed:
Arg::validator
now takes first argument as Fn(&str) -> Result<O, E: ToString>
instead of Fn(String) -> Result<(), String>
Arg::validator_os
now takes first argument as Fn(&OsStr) -> Result<O, OsString>
instead of Fn(&OsStr) -> Result<(), OsString>
Arg::value_name
now sets, rather than appends (see clap-rs/clap#2634)- Upgrade
yaml-rust
from 0.3 to 0.4 - Replaced
ArgGroup::from(BTreeMap)
to ArgGroup::from(yaml)
- Replaced
ArgMatches::usage
with App::generate_usage
- Replaced
Arg::settings
with Arg::setting(Setting1 | Setting2)
App
and Arg
now need only one lifetime- Removed deprecated
App::with_defaults
, replaced with app_from_crate
- Removed deprecated
AppSettings::PropagateGlobalValuesDown
(now the default) - Some
App
functions, like App::write_help
now take &mut self
instead of &self
Error::message
is now private, use Error::to_string
Arg::default_value_if
, Arg::default_value_if_os
, Arg::default_value_ifs
, Arg::default_value_ifs_os
now takes the default value parameter as an option (clap-rs/clap#1406)- Changed
App::print_help
& App::print_long_help
to now return std::io::Result
- Changed
App::write_help
& App::write_long_help
to now return std::io::Result
- Changed
Arg::index
, Arg::number_of_values
, Arg::min_values
, Arg::max_values
to taking usize
instead of u64 - Changed
Error::info
to type Vec<String>
instead of Option<Vec<String>>
- Changed
ArgMatches::subcommand
to now return Option<(&str, &ArgMatches)>
- Renamed
ErrorKind::MissingArgumentOrSubcommand
to ErrorKind::DisplayHelpOnMissingArgumentOrSubcommand
- Renamed
ErrorKind::HelpDisplayed
to ErrorKind::DisplayHelp
- Renamed
ErrorKind::VersionDisplayed
to ErrorKind::DisplayVersion
- Added
#[non_exhaustive]
to clap::{ValueHint, ErrorKind, AppSettings, ArgSettings}
(clap-rs/clap#3167)
From structopt 0.3.25
- By default, the
App
isn't initialized with crate information anymore. Now opt-in via #[clap(author)]
, #[clap(about)]
, #[clap(version)]
(clap-rs/clap#3034) #[clap(default_value)]
is replaced with #[clap(default_value_t)]
(clap-rs/clap#1694)- Subcommands nested under subcommands now needs a
#[clap(subcommand)]
attribute (clap-rs/clap#2587) Vec<_>
and Option<Vec<_>>
have changed from multiple
to multiple_occurrences
On top of the clap 2 changes
Performance
From clap 2
- Split out non-default
unicode
feature flag for faster builds and smaller binaries for ASCII-only CLIs. - Split out non-default
env
feature flag for faster builds and smaller binaries.
Features
From clap 2
Integration of structopt::StructOpt
via clap::Parser
(requires derive
feature flag)
Custom help headings
App::help_heading
(apply to all future args)Arg::help_heading
(apply to current arg)App::subcommand_help_heading
along with App::subcommand_value_name
(apply to subcommands)- See clap-rs/clap#805
AppSettings::UnifiedHelpMessage
is now default behaviour (clap-rs/clap#2807)
Deriving of ArgEnum
for generating Arg::possible_values
(requires derive
feature flag)
Disable built-in help/version behavior with AppSettings::NoAutoHelp
and AppSettings::NoAutoVersion
Change an existing arg with new builder method mut_arg
(particularly helpful for --help
and --version
)
Provide extra context in long help messages (--help
) with before_long_help
and after_long_help
(clap-rs/clap#1903)
Detect missing help descriptions via debug asserts by enabling AppSettings::HelpExpected
Aliases for short flags (clap-rs/clap#1896)
Validate UTF-8 values, rather than panicing during ArgMatches::value_of
thanks to AppSettings::AllowInvalidUtf8ForExternalSubcommands
and ArgSettings::AllowInvalidUtf8
- Debug builds will assert when the
ArgMatches
calls do not match the UTF-8 setting. - See clap-rs/clap#751
clap::PossibleValue
to allow
Allow arguments to conflict with all others via Arg::exclusive
(clap-rs/clap#1583)
Validate arguments with a regex (required regex
feature flag)
Arg::default_missing_value
for cases like --color[=<WHEN>]
(clap-rs/clap#1587)
clap::App::color
/ clap::ColorChoice
to specify color setting for the app
Custom error reporting with App::error
App::debug_assert
test helper
Replace Arg::multiple(bool)
with Arg::multiple_values
/ Arg::multiple_occurrences
- Positionals can be either
Added support for flag subcommands like pacman (clap-rs/clap#1361)
Partial parsing via AppSettings::IgnoreErrors
(clap-rs/clap#1880)
Enable cmd help
to print long help (--help
instead of -h
) with AppSettings::UseLongFormatForHelpSubcommand
(clap-rs/clap#2435)
Allow long arg abbreviations like we do with subcommands via AppSettings::InferLongArgs
(clap-rs/clap#2435)
Detect subcommands among positional arguments with AppSettings::SubcommandPrecedenceOverArg
Give completion scripts hints with Arg::value_hint
(clap-rs/clap#1793)
Allow unsetting defaults with
Arg::default_value_if
, Arg::default_value_if_os
, Arg::default_value_ifs
, Arg::default_value_ifs_os
(clap-rs/clap#1406)
Interpret some env variable values as false
for flags, in addition to “not-present” (clap-rs/clap#2539)
Added arg!
macro for creating an Arg
from a compile-time usage parser
(Experimental) Busybox-like multi-call support
- See
AppSettings::Multicall
behind unstable-multicall
feature flag - See clap-rs/clap#1120
(Experimental) Alias an argument to anything group of arguments
- See
App::replace
behind unstable-replace
feature flag - See clap-rs#1603
(Experimental) Grouping of multiple values within multiple occurrences
- See
ArgMatches::grouped_values_of
behind unstable-grouped
feature flag - See clap-rs/clap#1026
From structopt 0.3.25
- Allow defaulting with native types via new
default_value_t [= <expr>]
attribute (clap-rs/clap#1694) - New
update
API - New
arg_enum
attribute for integrating with ArgEnum
trait
On top of the clap 2 changes
Fixes
From clap 2
- Correctly handle colored output on Windows
- Only generate version flags when
App::version
, App::long_version
are set (see clap-rs/clap#2812) - General completion script improvements
- Limited default help text wrapping to 100 when
wrap_help
feature is not enabled - Be more specific than
Arg::multiple
with Arg::multiple_values
and Arg::multiple_occurrences
app_from_crate!
defaults to separating multiple authors with ", "
- Ensure all examples work
IgnoreCase
is now unicode aware (requires unicode
feature flag)- Always respect
ColorChoice::Never
, even if that means we skip colors in some cases ArgMatches
panics on unknown arguments- Gracefully handle empty
authors
field in Cargo.toml
with app_from_crate
- Do not show
--help
in cmd help
with DisableHelpFlag
(clap-rs/clap#3169) - Do not show
--help
in cmd help help
that doesn't work (clap-rs/clap#3169)
From structopt 0.3.25
- Support
SubcommandsNegateReqs
by allowing required Option<_>
s (clap-rs/clap#2255) - Infer
AllowInvalidUtf8
based on parser (clap-rs/clap#751) - Gracefully handle empty
authors
field in Cargo.toml
- Don't panic with
default_value_os
but treat it like default_value
(clap-rs/clap#3031) - When using
flatten
and subcommand
, ensure our doc comment always overrides the nested container's doc comment, whether it has only about
or about
and long_about
(clap-rs/clap#3175)
On top of the clap 2 changes
Minimum Required Rust
- As of this release,
clap
requires rustc 1.54.0
or greater.
2.34.0 - 2021-11-30
- Updates to Rust 2018 edition and bumps the MSRV to Rust 1.46
2.33.4 - 2021-11-29
Bug Fixes
- prevents
panic
: swallows broken pipe errors on error output (7a729bc4)
2.33.3 - 2020-08-13
Improvements
- Suppress deprecation warnings when using
crate_*
macros.
Documentation
- Fixed links to
2.x
examples. Now they point to the right place.
2.33.1 - 2020-05-11
Bug Fixes
- Windows: Prevent some panics when parsing invalid Unicode on Windows (922c645, closes #1905)
Documentation
- fixes versions referenced in the README (d307466a)
- README.md:
- cuts down the number of examples to reduce confusion (6e508ee0)
Improvements
- Deps: doesnt compile ansi_term on Windows since its not used (b57ee946, closes #1155)
Minimum Required Rust
- As of this release,
clap
requires rustc 1.36.0
or greater.
2.33.0 - 2019-04-06
New Sponsor
- Stephen Oats is now a sponsor \o/ (823457c0)
- SPONSORS.md: fixes Josh Triplett's info in the sponsor document (24cb5740)
Features
- Completions: adds completion support for Elvish. (e9d0562a)
- There is a new setting to disable automatic building of
--help
and -h
flags (AppSettings::DisableAutoHelp
)
Improvements
- arg_matches.rs: add Debug implementations (47192b7a)
- macros: Support shorthand syntax for ArgGroups (df9095e7)
Documentation
- Refer to macOS rather than OSX. (ab0d767f)
- README.md: use https for all links (96a7639a)
Bug Fixes
- add debug assertion for missing args in subcommand ArgGroup (2699d9e5)
- Restore compat with Rust 1.21 (6b263de1)
- Don't mention unused subcommands (ef92e2b6)
- OsValues: Add
ExactSizeIterator
implementation (356c69e5) - arg_enum!:
- Fix comma position for valid values. (1f1f9ff3)
- Invalid expansions of some trailing-comma patterns (7023184f)
- completions: improve correctness of completions when whitespace is involved (5a08ff29)
- help message: Unconditionally uses long description for subcommands (6acc8b6a, closes #897)
- macros: fixes broken pattern which prevented calling multi-argument Arg methods (9e7a352e)
- parser: Better interaction between AllowExternalSubcommands and SubcommandRequired (9601c95a)
Minimum Required Rust
- As of this release,
clap
requires rustc 1.31.0
or greater.
v2.32.0 (2018-06-26)
Minimum Required Rust
- As of this release,
clap
requires rustc 1.21.0
or greater.
Features
- Completions: adds completion support for Elvish. (e9d0562a)
Improvements
- macros: Support shorthand syntax for ArgGroups (df9095e7)
Bug Fixes
- OsValues: Add
ExactSizeIterator
implementation (356c69e5) - arg_enum!: Invalid expansions of some trailing-comma patterns (7023184f)
- help message: Unconditionally uses long description for subcommands (6acc8b6a, closes #897)
Documentation
- Refer to macOS rather than OSX. (ab0d767f)
v2.31.2 (2018-03-19)
Bug Fixes
- Fish Completions: fixes a bug that only allowed a single completion in in Fish Shell (e8774a8, closes #1212)
- AllowExternalSubcommands: fixes a bug where external subcommands would be blocked by a similarly named subcommand (suggestions were getting in the way). (a410e85)
Documentation
- Fixes some typos in the
README.md
(c8e685d7)
v2.31.1 (2018-03-06)
Improvements
- AllowMissingPositional: improves the ability of AllowMissingPositional to allow ‘skipping’ to the last positional arg with ‘--’ (df20e6e2)
v2.31.0 (2018-03-04)
Features
- Arg Indices: adds the ability to query argument value indices (f58d0576)
- Indices: implements an Indices<Item=&usize> iterator (1e67be44)
- Raw Args adds a convenience function to
Arg
that allows implying all of Arg::last
Arg::allow_hyphen_values
and Arg::multiple(true)
(66a78f29)
Documentation
Improvements
- Cargo.toml: use codegen-units = 1 in release and bench profiles (19f425ea)
- Adds WASM support (clap now compiles on WASM!) (689949e5)
- Uses the short help tool-tip for PowerShell completion scripts (ecda22ce)
v2.30.0 (2018-02-13)
Bug Fixes
- YAML: Adds a missing conversion from
Arg::last
when instantiating from a YAML file (aab77c81a5, closes #1160)
Improvements
- Bash Completions: instead of completing a generic option name, all bash completions fall back to file completions UNLESS
Arg::possible_values
was used (872f02ae) - Deps: No longer needlessly compiles
ansi_term
on Windows since its not used (b57ee946, closes #1155) - Help Message: changes the
[values: foo bar baz]
array to [possible values: foo bar baz]
for consistency with the API (414707e4e97, closes #1160)
v2.29.4 (2018-02-06)
Bug Fixes
- Overrides Self: fixes a bug where options with multiple values couldn't ever have multiple values (d95907cf)
v2.29.3 (2018-02-05)
Improvements
- Overrides: clap now supports arguments which override with themselves (6c7a0010, closes #976)
Bug Fixes
- Requirements: fixes an issue where conflicting args would still show up as required (e06cefac, closes #1158)
- Fixes a bug which disallows proper nesting of
--
(73993fe, closes #1161)
New Settings
- AllArgsOverrideSelf: adds a new convenience setting to allow all args to override themselves (4670325d)
v2.29.2 (2018-01-16)
Features
- completions/zsh.rs:
- Escape possible values for options (25561dec)
- Implement positional argument possible values completion (f3b0afd2)
- Complete positional arguments properly (e39aeab8)
Bug Fixes
- completions/zsh.rs:
- Add missing autoload for is-at-least (a6522607)
- Don't pass -S to _arguments if Zsh is too old (16b4f143)
- Maybe fix completions with mixed positionals and subcommands (1146f0da)
- completions/zsh.zsh: Remove redundant code from output (0e185b92, closes #1142)
2.29.1 (2018-01-09)
Documentation
Performance
- further debloating by removing generics from error cases (eb8d919e)
- debloats clap by deduplicating logic and refactors (03e413d7)
Bug Fixes
- fixes the ripgrep benchmark by adding a value to a flag that expects it (d26ab2b9)
- bash completion: Change the bash completion script code generation to support hyphens. (ba7f1d18)
- completions/zsh.rs: Fix completion of long option values (46365cf8)
2.29.0 (2017-12-02)
API Additions
- Arg: adds Arg::hide_env_values(bool) which allows one to hide any current env values and display only the key in help messages (fb41d062)
2.28.0 (2017-11-28)
The minimum required Rust is now 1.20. This was done to start using bitflags 1.0 and having >1.0 deps is a very good thing!
Documentation
- changes the demo version to 2.28 to stay in sync (ce6ca492)
- Fix URL path to github hosted files (ce72aada, closes #1106)
- fix typo (002b07fc)
- README.md: updates the readme and pulls out some redundant sections (db6caf86)
Improvements
- adds ‘[SUBCOMMAND]’ to usage strings with only AppSettings::AllowExternalSubcommands is used with no other subcommands (e78bb757, closes #1093)
API Additions
- Adds Arg::case_insensitive(bool) which allows matching Arg::possible_values without worrying about ASCII case (1fec268e, closes #1118)
- Adds the traits to be used with the clap-derive crate to be able to use Custom Derive (6f4c3412)
Bug Fixes
- Fixes a regression where --help couldn't be overridden (a283d69f, closes #1112)
- fixes a bug that allowed options to pass parsing when no value was provided (2fb75821, closes #1105)
- ignore PropagateGlobalValuesDown deprecation warning (f61ce3f5, closes #1086)
Deps
v2.27.1 (2017-10-24)
Bug Fixes
- Adds
term_size
as an optional dependency (with feature wrap_help
) to fix compile bug
v2.27.0 (2017-10-24)
** This release raises the minimum required version of Rust to 1.18 **
** This release also contains a very minor breaking change to fix a bug **
The only CLIs affected will be those using unrestrained multiple values and subcommands where the subcommand name can coincide with one of the multiple values.
See the commit 0c223f54 for full details.
Bug Fixes
- Values from global args are now propagated UP and DOWN!
- fixes a bug where using AppSettings::AllowHyphenValues would allow invalid arguments even when there is no way for them to be valid (77ed4684, closes #1066)
- when an argument requires a value and that value happens to match a subcommand name, its parsed as a value (0c223f54, closes #1031, breaks #, #)
- fixes a bug that prevented number_of_values and default_values to be used together (5eb342a9, closes #1050, #1056)
- fixes a bug that didn't allow args with default values to have conflicts (58b5b4be, closes #1071)
- fixes a panic when using global args and calling App::get_matches_from_safe_borrow multiple times (d86ec797, closes #1076)
- fixes issues and potential regressions with global args values not being propagated properly or at all (a43f9dd4, closes #1010, #1061, #978)
- fixes a bug where default values are not applied if the option supports zero values (9c248cbf, closes #1047)
Documentation
- adds additional blurbs about using multiples with subcommands (03455b77)
- updates the docs to reflect changes to global args and that global args values can now be propagated back up the stack (ead076f0)
- add html_root_url attribute (e67a061b)
- sync README version numbers with crate version (5536361b)
Improvements
- args that have require_delimiter(true) is now reflected in help and usage strings (dce61699, closes #1052)
- if all subcommands are hidden, the subcommands section of the help message is no longer displayed (4ae7b046, closes #1046)
Breaking Changes
- when an argument requires a value and that value happens to match a subcommand name, its parsed as a value (0c223f54, closes #1031, breaks #, #)
Deprecations
- AppSettings::PropagateGlobalValuesDown: this setting is no longer required to propagate values down or up (2bb5ddce)
v2.26.2 (2017-09-14)
Improvements
- if all subcommands are hidden, the subcommands section of the help message is no longer displayed (4ae7b046, closes #1046)
Bug Fixes
- fixes a bug where default values are not applied if the option supports zero values (9c248cbf, closes #1047)
v2.26.1 (2017-09-14)
Bug Fixes
- fixes using require_equals(true) and min_values(0) together (10ae208f, closes #1044)
- escape special characters in zsh and fish completions (87e019fc)
- avoid panic generating default help msg if term width set to 0 due to bug in textwrap 0.7.0 (b3eadb0d)
- Change
who's
-> whose
(53c1ffe8) - adds a debug assertion to ensure all args added to groups actually exist (7ad123e2, closes #917)
- fixes a bug where args that allow values to start with a hyphen couldn't contain a double hyphen -- as a value (ab2f4c9e, closes #960)
- fixes a bug where positional argument help text is misaligned (54c16836)
- Help Message: fixes long_about not being usable (a8257ea0, closes #1043)
- Suggestions: output for flag after subcommand (434ea5ba)
v2.26.0 (2017-07-29)
Minimum version of Rust is now v1.13.0 (Stable)
Improvements
- bumps unicode-segmentation to v1.2 (cd7b40a2)
Performance
- update textwrap to version 0.7.0 (c2d4e637)
v2.25.1 (2017-07-21)
Improvements
- impl Default for Values + OsValues for any lifetime. (fb7d6231f1)
Documentation
- Various documentation typos and grammar fixes
v2.25.0 (2017-06-20)
Features
- use textwrap crate for wrapping help texts (b93870c1)
Improvements
- Suggestions: suggests to use flag after subcommand when applicable (2671ca72)
- Bumps bitflags crate to v0.9
Documentation
Documentation
- App::template: adds details about the necessity to use AppSettings::UnifiedHelpMessage when using {unified} tags in the help template (cbea3d5a, closes #949)
- Arg::allow_hyphen_values: updates the docs to include warnings for allow_hyphen_values and multiple(true) used together (f9b0d657)
- README.md:
- clap_app!: adds using the @group specifier to the macro docs (826048cb, closes #932)
v2.24.2 (2017-05-15)
Bug Fixes
- adds a debug assertion to ensure all args added to groups actually exist (14f6b8f3, closes #917)
- fixes a bug where args that allow values to start with a hyphen couldn't contain a double hyphen -- as a value (ebf73a09, closes #960)
- fixes a bug where positional argument help text is misaligned (54c16836)
Documentation
- App::template: adds details about the necessity to use AppSettings::UnifiedHelpMessage when using {unified} tags in the help template (cf569438, closes #949)
- Arg::allow_hyphen_values: updates the docs to include warnings for allow_hyphen_values and multiple(true) used together (ded5a2f1)
- clap_app!: adds using the @group specifier to the macro docs (fe85fcb1, closes #932)
v2.24.0 (2017-05-07)
Bug Fixes
- fixes a bug where args with last(true) and required(true) set were not being printed in the usage string (3ac533fe, closes #944)
- fixes a bug that was printing the arg name, instead of value name when Arg::last(true) was used (e1fe8ac3, closes #940)
- fixes a bug where flags were parsed as flags AND positional values when specific combinations of settings were used (20f83292, closes #946)
v2.24.0 (2017-05-05)
Documentation
API Additions
- Arg: add
default_value_os
(d5ef8955) - arg_matches.rs: Added a Default implementation for Values and OsValues iterators. (0a4384e3)
v2.23.2 (2017-04-19)
Bug Fixes
- PowerShell Completions: fixes a bug where powershells completions cant be used if no subcommands are defined (a8bce558, closes #931)
Improvements
- bumps term_size to take advantage of better terminal dimension handling (e05100b7)
- PowerShell Completions: massively dedups subcommand names in the generate script to make smaller scripts that are still functionally equiv (85b0e1cc)
Documentation
- Fix a typo the minimum rust version required (71dabba3)
v2.23.1 (2017-04-05)
Bug Fixes
- fixes a missing newline character in the autogenerated help and version messages in some instances (5ae9007d)
v2.23.0 (2017-04-05)
API Additions
App::long_about
App::long_version
App::print_long_help
App::write_long_help
App::print_long_version
App::write_long_version
Arg::long_help
Features
- allows distinguishing between short and long version messages (-V/short or --version/long) (59272b06)
- allows distinguishing between short and long help with subcommands in the same manner as args (6b371891)
- allows specifying a short help vs a long help (i.e. varying levels of detail depending on if -h or --help was used) (ef1b24c3)
- clap_app!: adds support for arg names with hyphens similar to longs with hyphens (f7a88779, closes #869)
Bug Fixes
- fixes a bug that wasn't allowing help and version to be properly overridden (8b2ceb83, closes #922)
Documentation
- clap_app!: documents the
--("some-arg")
method for using args with hyphens inside them (bc08ef3e, closes #919)
v2.22.2 (2017-03-30)
Bug Fixes
- Custom Usage Strings: fixes the usage string regression when using help templates (0e4fd96d)
v2.22.1 (2017-03-24)
Bug Fixes
- usage: fixes a big regression with custom usage strings (2c41caba)
v2.22.0 (2017-03-23)
API Additions
- App::name: adds the ability to change the name of the App instance after creation (d49e8292, closes #908)
- Arg::hide_default_value: adds ability to hide the default value of an argument from the help string (89e6ea86, closes #902)
v2.21.3 (2017-03-23)
Bug Fixes
- yaml: adds support for loading author info from yaml (e04c390c)
v2.21.2 (2017-03-17)
Improvements
- add fish subcommand help support (f8f68cf8)
- options that use
require_equals(true)
now display the equals sign in help messages, usage strings, and errors" (c8eb0384, closes #903)
Bug Fixes
- setting the max term width now correctly propagates down through child subcommands
v2.21.1 (2017-03-12)
Bug Fixes
- ArgRequiredElseHelp: fixes the precedence of this error to prioritize over other error messages (74b751ff, closes #895)
- Positionals: fixes some regression bugs resulting from old asserts in debug mode. (9a3bc98e, closes #896)
v2.21.0 (2017-03-09)
Performance
- doesn't run
arg_post_processing
on multiple values anymore (ec516182) - changes internal use of
VecMap
to Vec
for matched values of Arg
s (22bf137a) - vastly reduces the amount of cloning when adding non-global args minus when they're added from
App::args
which is forced to clone (8da0303b) - refactor to remove unneeded vectors and allocations and checks for significant performance increases (0efa4119)
Documentation
- Fix examples link in CONTRIBUTING.md (60cf875d)
Improvements
- when
AppSettings::SubcommandsNegateReqs
and ArgsNegateSubcommands
are used, a new more accurate double line usage string is shown (50f02300, closes #871)
API Additions
- Arg::last: adds the ability to mark a positional argument as ‘last’ which means it should be used with
--
syntax and can be accessed early (6a7aea90, closes #888) - provides
default_value_os
and default_value_if[s]_os
(0f2a3782, closes #849) - provides
App::help_message
and App::version_message
which allows one to override the auto-generated help/version flag associated help (389c413, closes #889)
New Settings
- InferSubcommands: adds a setting to allow one to infer shortened subcommands or aliases (i.e. for subcommmand “test”, “t”, “te”, or “tes” would be allowed assuming no other ambiguities) (11602032, closes #863)
Bug Fixes
- doesn't print the argument sections in the help message if all args in that section are hidden (ce5ee5f5)
- doesn't include the various [ARGS] [FLAGS] or [OPTIONS] if the only ones available are hidden (7b4000af, closes #882)
- now correctly shows subcommand as required in the usage string when AppSettings::SubcommandRequiredElseHelp is used (8f0884c1)
- fixes some memory leaks when an error is detected and clap exits (8c2dd287)
- fixes a trait that's marked private accidentally, but should be crate internal public (1ae21108)
- Completions: fixes a bug that tried to propagate global args multiple times when generating multiple completion scripts (5e9b9cf4, closes #846)
Features
- Options: adds the ability to require the equals syntax with options --opt=val (f002693d, closes #833)
v2.20.5 (2017-02-18)
Bug Fixes
- clap_app!: fixes a critical bug of a missing fragment specifier when using
!property
style tags. (5635c1f94)
v2.20.4 (2017-02-15)
Bug Fixes
- Completions: fixes a bug that tried to propagate global args multiple times when generating multiple completion scripts (5e9b9cf4, closes #846)
Documentation
- Fix examples link in CONTRIBUTING.md (60cf875d)
v2.20.3 (2017-02-03)
Documentation
- Macros: adds a warning about changing values in Cargo.toml not triggering a rebuild automatically (112aea3e, closes #838)
Bug Fixes
- fixes a println->debugln typo (279aa62e)
- fixes bash completions for commands that have an underscore in the name (7f5cfa72, closes #581)
- fixes a bug where ZSH completions would panic if the binary name had an underscore in it (891a2a00, closes #581)
- allow final word to be wrapped in wrap_help (564c5f0f, closes #828)
- fixes a bug where global args weren't included in the generated completion scripts (9a1e006e, closes #841)
v2.20.2 (2017-02-03)
Bug Fixes
- fixes a critical bug where subcommand settings were being propagated too far (74648c94, closes #832)
Improvements
- adds ArgGroup::multiple to the supported YAML fields for building ArgGroups from YAML (d8590037, closes #840)
v2.20.1 (2017-01-31)
Bug Fixes
- allow final word to be wrapped in wrap_help (564c5f0f, closes #828)
- actually show character in debug output (84d8c547)
- include final character in line length (aff4ba18)
Improvements
- updates libc and term_size deps for the libc version conflict (6802ac4a)
Documentation
- fix link from app_from_crate! to crate_authors! (#822) (5b29be9b)
- fix spelling of “guaranteed” (4f30a65b)
New Settings
- ArgsNegateSubcommands: disables args being allowed between subcommands (5e2af8c9, closes #793)
- DontCollapseArgsInUsage: disables the collapsing of positional args into
[ARGS]
in the usage string (c2978afc, closes #769) - DisableHelpSubcommand: disables building the
help
subcommand (a10fc859) - AllowMissingPositional: allows one to implement
$ prog [optional] <required>
style CLIs where the second positional argument is required, but the first is optional (1110fdc7, closes #636) - PropagateGlobalValuesDown: automatically propagats global arg's values down through used subcommands (985536c8, closes #694)
API Additions
Arg
- Arg::value_terminator: adds the ability to terminate multiple values with a given string or char (be64ce0c, closes #782)
- Arg::default_value_if[s]: adds new methods for conditional default values (such as a particular value from another argument was used) (eb4010e7)
- Arg::requires_if[s]: adds the ability to conditionally require additional args (such as if a particular value was used) (198449d6)
- Arg::required_if[s]: adds the ability for an arg to be conditionally required (i.e. “arg X is only required if arg Y was used with value Z”) (ee9cfddf)
- Arg::validator_os: adds ability to validate values which may contain invalid UTF-8 (47232498)
Macros
- crate_description!: Uses the
Cargo.toml
description field to fill in the App::about
method at compile time (4d9a82db, closes #778) - crate_name!: Uses the
Cargo.toml
name field to fill in the App::new
method at compile time (4d9a82db, closes #778) - app_from_crate!: Combines
crate_version!
, crate_name!
, crate_description!
, and crate_authors!
into a single macro call to build a default App
instance from the Cargo.toml
fields (4d9a82db, closes #778)
Features
- no_cargo: adds a
no_cargo
feature to disable Cargo-env-var-dependent macros for those not using cargo
to build their crates (#786) (6fdd2f9d)
Bug Fixes
- Options: fixes a critical bug where options weren't forced to have a value (5a5f2b1e, closes #665)
- fixes a bug where calling the help of a subcommand wasn't ignoring required args of parent commands (d3d34a2b, closes #789)
- Help Subcommand: fixes a bug where the help subcommand couldn't be overridden (d34ec3e0, closes #787)
- Low Index Multiples: fixes a bug which caused combinations of LowIndexMultiples and
Arg::allow_hyphen_values
to fail parsing (26c670ca)
Improvements
- Default Values: improves the error message when default values are involved (1f33de54, closes #774)
- YAML: adds conditional requirements and conditional default values to YAML (9a4df327, closes #764)
- Support
--("some-arg-name")
syntax for defining long arg names when using clap_app!
macro (f41ec962) - Support
("some app name")
syntax for defining app names when using clap_app!
macro (9895b671, closes #759) - Help Wrapping: long app names (with spaces), authors, and descriptions are now wrapped appropriately (ad4691b7, closes #777)
Documentation
- Conditional Default Values: fixes the failing doc tests of Arg::default_value_ifs (4ef09101)
- Conditional Requirements: adds docs for Arg::requires_ifs (7f296e29)
- README.md: fix some typos (f22c21b4)
- src/app/mod.rs: fix some typos (5c9b0d47)
v2.19.3 (2016-12-28)
Bug Fixes
- fixes a bug where calling the help of a subcommand wasn't ignoring required args of parent commands (a0ee4993, closes #789)
v2.19.2 (2016-12-08)
Bug Fixes
- ZSH Completions: escapes square brackets in ZSH completions (7e17d5a3, closes #771)
Documentation
- Examples: adds subcommand examples (0e0f3354, closes #766)
- README.md: adds guidance on when to use ~ in version pinning, and clarifies breaking change policy (591eaefc, closes #765)
v2.19.1 (2016-12-01)
Bug Fixes
- Help Messages: fixes help message alignment when specific settings are used on options (cd94b318, closes #760)
Improvements
- Bash Completion: allows bash completion to fall back to traditional bash completion upon no matching completing function (b1b16d56))
v2.19.0 (2016-11-21)
Features
- allows specifying AllowLeadingHyphen style values, but only for specific args vice command wide (c0d70feb, closes #742)
Bug Fixes
- Required Unless: fixes a bug where having required_unless set doesn't work when conflicts are also set (d20331b6, closes #753)
- ZSH Completions: fixes an issue where zsh completions caused panics if there were no subcommands (49e7cdab, closes #754)
Improvements
- Validators: improves the error messages for validators (65eb3385, closes #744)
Documentation
- updates the docs landing page (01e1e33f)
- adds the macro version back to the readme (45eb9bf1)
- fix broken docs links (808e7cee)
- Compatibility Policy: adds an official compatibility policy to (760d66dc, closes #740)
- Contributing: updates the readme to improve the readability and contributing sections (eb51316c)
v2.18.0 (2016-11-05)
Features
- Completions: adds completion support for PowerShell. (cff82c88, closes #729)
v2.17.1 (2016-11-02)
Bug Fixes
- Low Index Multiples: fixes a bug where using low index multiples was propagated to subcommands (33924e88, closes #725)
v2.17.0 (2016-11-01)
Features
- Positional Args: allows specifying the second to last positional argument as multiple(true) (1ced2a74, closes #725)
v2.16.4 (2016-10-31)
Improvements
- Error Output: conflicting errors are now symmetrical, meaning more consistent and less confusing (3d37001d, closes #718)
Documentation
- Fix typo in example
13a_enum_values_automatic
(c22fbc07) - README.md: fixes failing yaml example (#715) (21fba9e6)
Bug Fixes
- ZSH Completions: fixes bug that caused panic on subcommands with aliases (5c70e1a0, closes #714)
- debug: fixes the debug feature (#716) (6c11ccf4)
v2.16.3 (2016-10-28)
Bug Fixes
- Derive display order after propagation (9cb6facf, closes #706)
- yaml-example: inconsistent args (847f7199)
v2.16.2 (2016-10-25)
Bug Fixes
- Fish Completions: fixes a bug where single quotes are not escaped (780b4a18, closes #704)
v2.16.1 (2016-10-24)
Bug Fixes
- Help Message: fixes a regression bug where args with multiple(true) threw off alignment (ebddac79, closes #702)
v2.16.0 (2016-10-23)
Features
- Completions: adds ZSH completion support (3e36b0ba, closes #699)
v2.15.0 (2016-10-21)
Features
- AppSettings: adds new setting
AppSettings::AllowNegativeNumbers
(ab064546, closes #696)
Documentation
- app/settings.rs: moves variants to roughly alphabetical order (9ed4d4d7)
v2.14.1 (2016-10-20)
Documentation
- Improve documentation around features (4ee85b95)
- reword docs for ErrorKind and app::Settings (3ccde7a4)
- fix tests that fail when the “suggestions” feature is disabled (996fc381)
- fix the OsString-using doc-tests (af9e1a39)
- tag non-rust code blocks as such instead of ignoring them (0ba9f4b1)
- ErrorKind: improve some errors about subcommands (9f6217a4)
- yaml: make sure the doc-tests don't fail before “missing file” (8c0f5551)
Improvements
Bug Fixes
- fixes a bug that made determining when to auto-wrap long help messages inconsistent (468baadb, closes #688)
- Completions: fish completions for nested subcommands (a61eaf8a)
- features: Make lints not enable other nightly-requiring features (835f75e3)
v2.14.0 (2016-10-05)
Features
- arg_aliases: Ability to alias arguments (33b5f6ef, closes #669)
- flag_aliases: Ability to alias flags (40d6dac9)
Bug Fixes
- UsageParser: Handle non-ascii names / options. (1d6a7c6e, closes #664)
Documentation
v2.13.0 (2016-09-18)
Documentation
- updates README.md with new website information and updated video tutorials info (0c19c580)
- updates the docs about removing implicit value_delimiter(true) (c81bc722)
- Default Values: adds better examples on using default values (57a8d9ab, closes #418)
Bug Fixes
- Value Delimiters: fixes the confusion around implicitly setting value delimiters. (default is now
false
) (09d4d0a9, closes #666)
v2.12.1 (2016-09-13)
Bug Fixes
- Help Wrapping: fixes a regression-bug where the old {n} newline char stopped working (92ac353b, closes #661)
v2.12.0 (2016-09-13)
Features
- Help: adds ability to hide the possible values on a per argument basis (9151ef73, closes #640)
- help: allow for limiting detected terminal width (a43e28af, closes #653)
Documentation
- Help Wrapping: removes the verbage about using
'{n}'
to insert newlines in help text (c5a2b352) - Value Delimiters: updates the docs for the Arg::multiple method WRT value delimiters and default settings (f9d17a06)
- appsettings: Document AppSetting::DisableVersion (94501965, closes #589)
Bug Fixes
- AllowLeadingHyphen: fixes a bug where valid args aren't recognized with this setting (a9699e4d, closes #588)
Improvements
- Help Wrapping:
- clap now ignores hard newlines in help messages and properly re-aligns text, but still wraps if the term width is too small (c7678523, closes #617)
- makes some minor changes to when next line help is automatically used (01cae799)
- Value Delimiters: changes the default value delimiter rules (f9e69254, closes #655)
- YAML: supports setting Arg::require_delimiter from YAML (b9b55a39)
Performance
- help: fix redundant contains() checks (a8afed74)
v2.11.3 (2016-09-07)
Documentation
- Help Wrapping: removes the verbage about using
'{n}'
to insert newlines in help text (c5a2b352)
Improvements
- Help Wrapping:
- clap now ignores hard newlines in help messages and properly re-aligns text, but still wraps if the term width is too small (c7678523, closes #617)
- makes some minor changes to when next line help is automatically used (01cae799)
- YAML: supports setting Arg::require_delimiter from YAML (b9b55a39)
v2.11.2 (2016-09-06)
Improvements
- Help Wrapping: makes some minor changes to when next line help is automatically used (5658b117)
v2.11.1 (2016-09-05)
Bug Fixes
- Settings: fixes an issue where settings weren't propagated down through grandchild subcommands (b3efc107, closes #638)
Features
- Errors: Errors with custom description (58512f2f)
Improvements
- help: use term_size instead of home-grown solution (fc7327e9)
v2.11.0 (2016-08-28)
Bug Fixes
- Groups: fixes some usage strings that contain both args in groups and ones that conflict with each other (3d782def, closes #616)
Documentation
Improvements
- Completions: uses standard conventions for bash completion files, namely ‘{bin}.bash-completion’ (27f5bbfb, closes #567)
- Help: automatically moves help text to the next line and wraps when term width is determined to be too small, or help text is too long (150964c4, closes #597)
- YAML Errors: vastly improves error messages when using YAML (f43b7c65, closes #574)
Features
- adds App::with_defaults to automatically use crate_authors! and crate_version! macros (5520bb01, closes #600)
v2.10.4 (2016-08-25)
Bug Fixes
- Help Wrapping: fixes a bug where help is wrapped incorrectly and causing a panic with some non-English characters (d0b442c7, closes #626)
v2.10.3 (2016-08-25)
Features
- Help: adds new short hand way to use source formatting and ignore term width in help messages (7dfdaf20, closes #625)
Documentation
- Term Width: adds details about set_term_width(0) (00b8205d)
Bug Fixes
- Unicode: fixes two bugs where non-English characters were stripped or caused a panic with help wrapping (763a5c92, closes #626)
v2.10.2 (2016-08-22)
Bug Fixes
- fixes a bug where the help is printed twice (a643fb28, closes #623)
v2.10.1 (2016-08-21)
Bug Fixes
- Help Subcommand: fixes misleading usage string when using multi-level subcommmands (e203515e, closes #618)
Features
- YAML: allows using lists or single values with arg declarations (9ade2cd4, closes #614, #613)
v2.10.0 (2016-07-29)
Features
- Completions: one can generate a basic fish completions script at compile time (1979d2f2)
Bug Fixes
- parser: preserve external subcommand name (875df243)
Breaking Changes
- parser: preserve external subcommand name (875df243)
Documentation
- YAML: fixes example 17's incorrect reference to arg_groups instead of groups (b6c99e13, closes #601)
2.9.3 (2016-07-24)
Bug Fixes
- fixes bug where only first arg in list of required_unless_one is recognized (1fc3b55b, closes #575)
- Settings: fixes typo subcommandsrequired->subcommandrequired (fc72cdf5, closes #593)
Features
- Completions: adds the ability to generate completions to io::Write object (9f62cf73)
- Settings: Add unset_setting and unset_settings fns to App (#598) (0ceba231, closes #590)
2.9.2 (2016-07-03)
Documentation
- Completions: fixes the formatting of the Cargo.toml excerpt in the completions example (722f2607)
Bug Fixes
- Completions: fixes bug where --help and --version short weren't added to the completion list (e9f2438e, closes #536)
2.9.1 (2016-07-02)
Improvements
- Completions: allows multiple completions to be built by namespacing with bin name (57484b2d)
v2.9.0 (2016-07-01)
Documentation
- Completions:
- fixes some errors in the completion docs (9b359bf0)
- adds documentation for completion scripts (c6c519e4)
Features
- Completions:
- one can now generate a bash completions script at compile time! (e75b6c7b, closes #376)
- completions now include aliases to subcommands, including all subcommand options (0ab9f840, closes #556)
- completions now continue completing even after first completion (18fc2e5b)
- allows matching on possible values in options (89cc2026, closes #557)
Bug Fixes
- AllowLeadingHyphen: fixes an issue where isn't ignored like it should be with this setting (96c24c9a, closes #558)
v2.8.0 (2016-06-30)
Features
- Arg: adds new setting
Arg::require_delimiter
which requires val delimiter to parse multiple values (920b5595)
Bug Fixes
- Declare term::Winsize as repr(C) (5d663d90)
Documentation
v2.7.1 (2016-06-29)
Bug Fixes
- Options:
- options with multiple values and using delimiters no longer parse additional values after a trailing space (cdc500bd)
- using options with multiple values and with an = no longer parse args after the trailing space as values (290f61d0)
v2.7.0 (2016-06-28)
Documentation
- fix typos (43b3d40b)
- ArgGroup: vastly improves ArgGroup docs by adding better examples (9e5f4f5d, closes #534)
Features
- ArgGroup: one can now specify groups which require AT LEAST one of the args (33689acc, closes #533)
Bug Fixes
- App: using
App::print_help
now prints the same as would have been printed by --help
or the like (e84cc018, closes #536) - Help:
- prevents invoking help help and displaying incorrect help message (e3d2893f, closes #538)
- subcommand help messages requested via help now correctly match --help (08ad1cff, closes #539)
Improvements
- ArgGroup: Add multiple ArgGroups per Arg (902e182f, closes #426)
- Usage Strings:
[FLAGS]
and [ARGS]
are no longer blindly added to usage strings (9b2e45b1, closes #537) - arg_enum!: allows using meta items like repr(C) with arg_enum!s (edf9b233, closes #543)
v2.6.0 (2016-06-14)
Improvements
- removes extra newline from help output (86e61d19)
- allows printing version to any io::Write object (921f5f79)
- removes extra newline when printing version (7e2e2cbb)
- Aliases: improves readability of asliases in help messages (ca511de7, closes #526, #529)
- Usage Strings: improves the default usage string when only a single positional arg is present (ec86f2da, closes #518)
Features
- Help: allows wrapping at specified term width (Even on Windows!) (1761dc0d, closes #451)
- Settings:
- adds new setting to stop delimiting values with -- or TrailingVarArg (fc3e0f5a, closes #511)
- one can now set an AppSetting which is propagated down through child subcommands (e2341835, closes #519)
- Subcommands: adds support for visible aliases (7b10e7f8, closes #522)
Bug Fixes
- fixes bug where args are printed out of order with templates (05abb534)
- fixes bug where one can't override version or help flags (90d7d6a2, closes #514)
- fixes issue where before_help wasn't printed (b3faff60)
- Help:
App::before_help
and App::after_help
now correctly wrap (1f4da767, closes #516) - Settings: fixes bug where new color settings couldn't be converted from strs (706a7c11)
- Subcommands: subcommands with aliases now display help of the aliased subcommand (5354d14b, closes #521)
- Windows: fixes a failing windows build (01e7dfd6)
- YAML: adds missing YAML methods for App and Arg (e468faf3, closes #528)
v2.5.2 (2016-05-31)
Improvements
- removes extra newline from help output (86e61d19)
- allows printing version to any io::Write object (921f5f79)
- removes extra newline when printing version (7e2e2cbb)
Bug Fixes
- fixes bug where args are printed out of order with templates (3935431d)
- fixes bug where one can't override version or help flags (90d7d6a2, closes #514)
- fixes issue where before_help wasn't printed (b3faff60)
Documentation
- inter-links all types and pages (3312893d, closes #505)
- makes all publicly available types viewable in docs (52ca6505)
v2.5.1 (2016-05-11)
Bug Fixes
- Subcommand Aliases: fixes lifetime issue when setting multiple aliases at once (ac42f6cf0)
v2.5.0 (2016-05-10)
Improvements
- SubCommand Aliases: adds feature to yaml configs too (69592195)
Features
- SubCommands: adds support for subcommand aliases (66b4dea6, closes #469)
v2.4.3 (2016-05-10)
Bug Fixes
- Usage Strings:
- now properly dedups args that are also in groups (3ca0947c, closes #498)
- removes duplicate groups from usage strings (f574fb8a)
Improvements
- Groups: formats positional args in groups in a better way (fef11154)
- Help:
- moves positionals to standard <> formatting (03dfe5ce)
- default help subcommand string has been shortened (5b7fe8e4, closes #494)
v2.4.3 (2016-05-10)
v2.4.3 (2016-05-10)
v2.4.0 (2016-05-02)
Features
- Help: adds support for displaying info before help message (29fbfa3b)
- Required: adds allowing args that are required unless certain args are present (af1f7916)
Documentation
- hides formatting from docs (cb708093)
- required_unless: adds docs and examples for required_unless (ca727b52)
Bug Fixes
- Required Args: fixes issue where missing required args are sometimes duplicated in error messages (3beebd81, closes #492)
v2.3.0 (2016-04-18)
Improvements
- macros.rs: Added write_nspaces macro (a new version of write_spaces) (9d757e86)
- parser.rs:
- Provide a way to create a usage string without the USAGE: title (a91d378b)
- Make Parser's create_usage public allowing to have function outside the parser to generate the help (d51945f8)
- Expose Parser's flags, opts and positionals argument as iterators (9b23e7ee)
- src/args: Exposes argument display order by introducing a new Trait (1321630e)
- srs/args: Added longest_filter to AnyArg trait (65b3f667)
Features
- Authors Macro: adds a crate_authors macro (38fb59ab, closes #447)
- HELP:
- implements optional colored help messages (abc8f669, closes #483)
- Add a Templated Help system. (81e121ed)
Bug Fixes
- HELP: Adjust Help to semantic changes introduced in 6933b84 (8d23806b)
v2.2.6 (2016-04-11)
Bug Fixes
- Arg Groups: fixes bug where arg name isn't printed properly (3019a685, closes #476)
v2.2.5 (2016-04-03)
Bug Fixes
- Empty Values: fixes bug where empty values weren't stored (885d166f, closes #470)
- Help Message: fixes bug where arg name is printed twice (71acf1d5, closes #472)
v2.2.4 (2016-03-30)
Bug Fixes
- fixes compiling with debug cargo feature (d4b55450)
- Empty Values: fixes bug where empty values weren't stored (885d166f, closes #470)
v2.2.3 (2016-03-28)
Bug Fixes
- Help Subcommand: fixes issue where help and version flags weren't properly displayed (205b07bf, closes #466)
v2.2.2 (2016-03-27)
Bug Fixes
- Help Message: fixes bug with wrapping in the middle of a unicode sequence (05365ddc, closes #456)
- Usage Strings: fixes small bug where -- would appear needlessly in usage strings (6933b849, closes #461)
2.2.1 (2016-03-16)
Features
- Help Message: wraps and aligns the help message of subcommands (813d75d0, closes #452)
Bug Fixes
- Help Message: fixes a bug where small terminal sizes causing a loop (1d73b035, closes #453)
v2.2.0 (2016-03-15)
Features
- Help Message: can auto wrap and aligning help text to term width (e36af026, closes #428)
- Help Subcommand: adds support passing additional subcommands to help subcommand (2c12757b, closes #416)
- Opts and Flags: adds support for custom ordering in help messages (9803b51e)
- Settings: adds support for automatically deriving custom display order of args (ad86e433, closes #444)
- Subcommands: adds support for custom ordering in help messages (7d2a2ed4, closes #442)
Bug Fixes
- From Usage: fixes a bug where adding empty lines weren't ignored (c5c58c86)
Documentation
- Groups: explains required ArgGroups better (4ff0205b, closes #439)
v2.1.2 (2016-02-24)
Bug Fixes
- Nightly: fixes failing nightly build (d752c170, closes #434)
v2.1.1 (2016-02-19)
Documentation
- AppSettings: clarifies that AppSettings do not propagate (3c8db0e9, closes #429)
- Arg Examples: adds better examples (1e79cccc)
Improvements
- Help: adds setting for next line help by arg (066df748, closes #427)
v2.1.0 (2016-02-10)
Features
- Default Values: adds support for default values in args (73211952, closes #418)
Documentation
- Default Values: adds better examples and notes for default values (9facd74f)
v2.0.6 (2016-02-09)
Improvements
- Positional Arguments: now displays value name if appropriate (f0a99916, closes #420)
v2.0.5 (2016-02-05)
Bug Fixes
- Multiple Values: fixes bug where number_of_values wasn't respected (72c387da)
v2.0.4 (2016-02-04)
Bug Fixes
- adds support for building ArgGroups from standalone YAML (fcbc7e12)
- Stop lonely hyphens from causing panic (85b11468, closes #410)
- AppSettings: fixes bug where subcmds didn't receive parent ver (a62e4527)
v2.0.3 (2016-02-02)
Improvements
- values: adds support for up to u64::max values per arg (c7abf7d7)
- occurrences: Allow for more than 256 occurrences of an argument. (3731ddb3)
Features
- AppSettings: adds HidePossibleValuesInHelp to skip writing those values (cdee7a0e)
Bug Fixes
- value_t_or_exit: fixes typo which causes value_t_or_exit to return a Result (ee96baff)
v2.0.2 (2016-01-31)
Improvements
- arg_enum: enum declared with arg_enum returns [&'static str; #] instead of Vec (9c4b8a1a)
Bug Fixes
- clap_app! should be gated by unstable, not nightly feature (0c8b84af)
- SubCommands: fixed where subcmds weren't recognized after mult args (c19c17a8, closes #405)
- Usage Parser: fixes a bug where literal single quotes weren't allowed in help strings (0bcc7120, closes #406)
v2.0.1 (2016-01-30)
Bug Fixes
- fixes cargo features to NOT require nightly with unstable features (dcbcc60c, closes #402)
v2.0.0 (2016-01-28)
Improvements
- From Usage: vastly improves the usage parser (fa3a2f86, closes #350)
Features
- adds support for external subcommands (177fe5cc, closes #372)
- adds support values with a leading hyphen (e4d429b9, closes #385)
- adds support for turning off the value delimiter (508db850, closes #352)
- adds support changing the value delimiter (dafeae8a, closes #353)
- adds support for comma separated values (e69da6af, closes #348)
- adds support with options with optional values (4555736c, closes #367)
- UTF-8: adds support for invalid utf8 in values (c5c59dec, closes #269)
- v2: implementing the base of 2.x (a3536054)
Bug Fixes
- fixes nightly build with new lints (17599195)
- fixes Windows build for 2x release (674c9b48, closes #392)
- fixes yaml build for 2x base (adceae64)
Documentation
- updates examples for 2x release (1303b360, closes #394)
- updates examples for 2x release (0a011f31, closes #394)
- updates documentation for v2 release (8d51724e)
- updating docs for 2x release (576d0e0e)
- README.md:
- updates readme for v2 release (acaba01a, closes #393)
- fix typo and make documentation conspicuous (07b9f614)
BREAKING CHANGES
- Fewer lifetimes! Yay!
App<'a, 'b, 'c, 'd, 'e, 'f>
=> App<'a, 'b>
Arg<'a, 'b, 'c, 'd, 'e, 'f>
=> Arg<'a, 'b>
ArgMatches<'a, 'b>
=> ArgMatches<'a>
- Simply Renamed
App::arg_group
=> App::group
App::arg_groups
=> App::groups
ArgGroup::add
=> ArgGroup::arg
ArgGroup::add_all
=> ArgGroup::args
ClapError
=> Error
- struct field
ClapError::error_type
=> Error::kind
ClapResult
=> Result
ClapErrorType
=> ErrorKind
- Removed Deprecated Functions and Methods
App::subcommands_negate_reqs
App::subcommand_required
App::arg_required_else_help
App::global_version(bool)
App::versionless_subcommands
App::unified_help_messages
App::wait_on_error
App::subcommand_required_else_help
SubCommand::new
App::error_on_no_subcommand
Arg::new
Arg::mutually_excludes
Arg::mutually_excludes_all
Arg::mutually_overrides_with
simple_enum!
- Renamed Error Variants
InvalidUnicode
=> InvalidUtf8
InvalidArgument
=> UnknownArgument
- Usage Parser
- Value names can now be specified inline, i.e.
-o, --option <FILE> <FILE2> 'some option which takes two files'
- There is now a priority of order to determine the name - This is perhaps the biggest breaking change. See the documentation for full details. Prior to this change, the value name took precedence. Ensure your args are using the proper names (i.e. typically the long or short and NOT the value name) throughout the code
ArgMatches::values_of
returns an Values
now which implements Iterator
(should not break any code)crate_version!
returns &'static str
instead of String
- Using the
clap_app!
macro requires compiling with the unstable
feature because the syntax could change slightly in the future
v1.5.5 (2016-01-04)
Bug Fixes
- fixes an issue where invalid short args didn't cause an error (c9bf7e44)
- prints the name in version and help instead of binary name (8f3817f6, closes #368)
- fixes an intentional panic issue discovered via clippy (ea83a3d4)
v1.5.4 (2015-12-18)
Examples
- 17_yaml: conditinonally compile 17_yaml example (575de089)
Improvements
Bug Fixes
- errors: return correct error type in WrongNumValues error builder (5ba8ba9d)
- ArgRequiredElseHelp setting now takes precedence over missing required args (faad83fb, closes #362)
v1.5.3 (2015-11-20)
Bug Fixes
- Errors: fixes some instances when errors are missing a final newline (c4d2b171)
v1.5.2 (2015-11-14)
Bug Fixes
- Errors: fixes a compiling bug when built on Windows or without the color feature (a35f7634)
v1.5.1 (2015-11-13)
Bug Fixes
- Required Args: fixes a bug where required args are not correctly accounted for (f03b88a9, closes #343)
v1.5.0 (2015-11-13)
Bug Fixes
- fixes a bug with required positional args in usage strings (c6858f78)
Documentation
- FAQ: updates readme with slight changes to FAQ (a4ef0fab)
Improvements
- massive errors overhaul (cdc29175)
- ArgMatcher: huge refactor and deduplication of code (8988853f)
- Errors: errors have been vastly improved (e59bc0c1)
- Traits: refactoring some configuration into traits (5800cdec)
Performance
- App:
- more BTreeMap->Vec, Opts and SubCmds (bc4495b3)
- changes flags BTreeMap->Vec (d357640f)
- removed unneeded BTreeMap (78971fd6)
- changes BTreeMap to VecMap in some instances (64b921d0)
- removed excess clones (ec0089d4)
v1.4.7 (2015-11-03)
Documentation
- Clarify behavior of Arg::multiple with options. (434f497a)
- Fix typos and improve grammar. (c1f66b5d)
Bug Fixes
- Error Status: fixes bug where --help and --version return non-zero exit code (89b51fdf)
v1.4.6 (2015-10-29)
Features
- allows parsing without a binary name for daemons and interactive CLIs (aff89d57, closes #318)
Bug Fixes
- Errors: tones down quoting in some error messages (34ce59ed, closes #309)
- Help and Version: only builds help and version once (e3be87cf)
- Option Args: fixes bug with args and multiple values (c9a9548a, closes #323)
- POSIX Overrides: fixes bug where required args are overridden (40ed2b50)
- Safe Matches: using ‘safe’ forms of the get_matches family no longer exit the process (c47025dc, closes #256)
- Versionless SubCommands: fixes a bug where the -V flag was needlessly built (27df8b9d, closes #329)
Documentation
v1.4.5 (2015-10-06)
Bug Fixes
- fixes crash on invalid arg error (c78ce128)
v1.4.4 (2015-10-06)
Documentation
- clean up some formatting (b7df92d7)
- move the crate-level docs to top of the lib.rs file (d7233bf1)
- changes doc comments to rustdoc comments (34b601be)
- fixes panic in 14_groups example (945b00a0, closes #295)
- avoid suggesting star dependencies. (d33228f4)
- Rustdoc: adds portions of the readme to main rustdoc page (6f9ee181, closes #293)
Bug Fixes
- grammar error in some conflicting option errors (e73b07e1)
- Unified Help: sorts both flags and options as a unified category (2a223dad)
- Usage: fixes a bug where required args aren't filtered properly (72b453dc, closes #277)
- Usage Strings: fixes a bug ordering of elements in usage strings (aaf0d6fe, closes #298)
Features
- supports -aValue style options (0e3733e4)
- Trailing VarArg: adds opt-in setting for final arg being vararg (27018b18, closes #278)
v1.4.3 (2015-09-30)
Features
- allows accessing arg values by group name (c92a4b9e)
Documentation
- use links to examples instead of plain text (bb4fe237)
Bug Fixes
- Help Message: required args no longer double list in usage (1412e639, closes #277)
- Possible Values: possible value validation is restored (f121ae74, closes #287)
v1.4.2 (2015-09-23)
Bug Fixes
- Conflicts: fixes bug with conflicts not removing required args (e17fcec5, closes #271)
v1.4.1 (2015-09-22)
Examples
Features
- Unicode: allows non-panicking on invalid unicode characters (c5bf7ddc)
Documentation
- properly names Examples section for rustdoc (87ba5445)
- fixes various typos and spelling (f85640f9)
- Arg: unhides fields of the Arg struct (931aea88)
Bug Fixes
v1.4.0 (2015-09-09)
Features
- allows printing help message by library consumers (56b95f32)
- allows defining hidden args and subcmds (2cab4d03, closes #231)
- Builder macro to assist with App/Arg/Group/SubCommand building (443841b0)
- Errors: allows consumers to write to stderr and exit on error (1e6403b6)
v1.3.2 (2015-09-08)
Documentation
Bug Fixes
- fixes a bug where the help subcommand wasn't overridable (94003db4)
Features
- adds ability not consume self when parsing matches and/or exit on help (94003db4)
- App: Added ability for users to handle errors themselves (934e6fbb)
v1.3.1 (2015-09-04)
Examples
Performance
- changes ArgGroup HashSets to Vec (3cb4a48e)
- changes BTreeSet for Vec in some instances (baab2e3f)
v1.3.0 (2015-09-01)
Features
- YAML: allows building a CLI from YAML files (86cf4c45)
- ArgGroups: adds support for building ArgGroups from yaml (ecf88665)
- Subcommands: adds support for subcommands from yaml (e415cf78)
Documentation
- YAML: adds examples for using YAML to build a CLI (ab41d7f3)
- Args from YAML: fixes doc examples (19b348a1)
- Examples: adds better usage examples instead of having unused variables (8cbacd88)
Examples
Bug Fixes
- Unified Help Messages: fixes a crash from this setting and no opts (169ffec1, closes #210)
v1.2.5 (2015-08-27)
Examples
Features
- Args: allows opts and args to define a name for help and usage msgs (ad962ec4)
v1.2.4 (2015-08-26)
Bug Fixes
- Possible Values: fixes a bug where suggestions aren't made when using --long=value format (3d5e9a6c, closes #192)
v1.2.3 (2015-08-24)
Bug Fixes
- App, Args: fixed subcommand reqs negation (b41afa8c, closes #188)
v1.2.2 (2015-08-23)
Bug Fixes
- fixed confusing error message, also added test for it (fc7a31a7)
- App: fixed requirmets overriding (9c135eb7)
v1.2.1 (2015-08-20)
Documentation
- README.md: updates for new features (16cf9245)
Features
- implements posix compatible conflicts for long args (8c2d48ac)
- added overrides to support conflicts in POSIX compatible manner (0b916a00)
- Args: allows defining POSIX compatible argument conflicts (d715646e)
Bug Fixes
- fixed links in cargo and license buttons (6d9837ad)
Performance
- Args and Apps: changes HashSet->Vec in some instances for increased performance (d0c3b379)
v1.2.0 (2015-08-15)
Bug Fixes
Documentation
- updates docs for new features (03496547)
- fixed docs for previous changes (ade36778)
Improvements
- AppSettings: adds ability to add multiple settings at once (4a00e251)
Features
- Replace application level settings with enum variants (618dc4e2)
- Args: allows for custom argument value validations to be defined (84ae2ddb, closes #170)
v1.1.6 (2015-08-01)
Bug Fixes
- fixes two bugs in App when printing newlines in help and subcommands required error (d63c0136)
v1.1.5 (2015-07-29)
Performance
- removes some unneeded allocations (93e915df)
v1.1.4 (2015-07-20)
Improvements
- Usage Strings displays a [--] when it may be helpful (86c3be85)
Bug Fixes
- Macros fixes a typo in a macro generated error message (c9195c5f)
- Type Errors fixes formatting of error output when failed type parsing (fe5d95c6)
v1.1.3 (2015-07-18)
Documentation
- updates README.md to include lack of color support on Windows (52f81e17)
Bug Fixes
- fixes formatting bug which prevented compiling on windows (9cb5dceb, closes #163)
v1.1.2 (2015-07-17)
Bug Fixes
- fixes a bug when parsing multiple {n} newlines inside help strings (6d214b54)
v1.1.1 (2015-07-17)
Bug Fixes
- fixes a logic bug and allows setting Arg::number_of_values() < 2 (42b6d1fc, closes #161)
v1.1.0 (2015-07-16)
Features
- allows creating unified help messages, a la docopt or getopts (52bcd892, closes #158)
- allows stating all subcommands should not have --version flags (336c476f, closes #156)
- allows setting version number to auto-propagate through subcommands (bc66d3c6, closes #157)
Improvements
- Help Strings properly aligns and handles newlines in long help strings (f9800a29, closes #145)
Performance
- Help Messages big performance improvements when printing help messages (52bcd892)
Documentation
- updates readme with new features (8232f7bb)
- fix incorrect code example for
App::subcommand_required
(8889689d)
v1.0.3 (2015-07-11)
Improvements
Documentation
- README.md updates example help message to new format (0aca29bd)
v1.0.2 (2015-07-09)
Improvements
- Usage re-orders optional arguments and required to natural standard (dc7e1fce, closes #147)
v1.0.1 (2015-07-08)
Bug Fixes
- allows empty values when using --long='' syntax (083f82d3, closes #151)
v1.0.0 (2015-07-08)
Documentation
- README.md adds new features to what's new list (938f7f01)
- README.md use with_name for subcommands (28b7e316)
Features
- args can now be parsed from arbitrary locations, not just std::env::args() (75312528)
v1.0.0-beta (2015-06-30)
Features
- allows waiting for user input on error (d0da3bdd, closes #140)
- Help allows one to fully override the auto-generated help message (26d5ae3e, closes #141)
Documentation
- adds “whats new” section to readme (ff149a29)
Improvements
- removes deprecated functions in prep for 1.0 (274484df)
v0.11.0 (2015-06-17) - BREAKING CHANGE
Documentation
- updates docs to new version flag defaults (ebf442eb)
Features
- Help and Version default short for version is now
-V
but can be overridden (only breaks manual documentation) (BREAKING CHANGE eb1d9320)
v0.10.5 (2015-06-06)
Bug Fixes
- Global Args global arguments propagate fully now (1f377960, closes #137)
v0.10.4 (2015-06-06)
Bug Fixes
- Global Args global arguments propagate fully now (8f2c0160, closes #137)
v0.10.3 (2015-05-31)
Bug Fixes
- Global Args fixes a bug where globals only transfer to one subcommand (a37842ee, closes #135)
v0.10.2 (2015-05-30)
Improvements
- Binary Names allows users to override the system determined bin name (2191fe94, closes #134)
Documentation
v0.10.1 (2015-05-26)
Features
- can now specify that an app or subcommand should display help on no args or subcommands (29ca7b2f, closes #133)
v0.10.0 (2015-05-23)
Features
- Global Args allows args that propagate down to child commands (2bcc6137, closes #131)
Improvements
- Colors implements more structured colored output (d6c3ed54, closes #129)
Deprecations
- SubCommand/App several methods and functions for stable release (28b73855)
Documentation
- updates for deprecations and new features (743eefe8)
v0.9.2 (2015-05-20)
Bug Fixes
- help allows parent requirements to be ignored with help and version (52218cc1, closes #124)
v0.9.1 (2015-05-18)
Bug Fixes
- help fixes a bug where requirements are included as program name in help and version (08ba3f25)
v0.9.0 (2015-05-17)
Improvements
- usage usage strings now include parent command requirements (dd8f21c7, closes #125)
- args allows consumer of clap to decide if empty values are allowed or not (ab4ec609, closes #122)
Features
- subcommands
- allows optionally specifying that no subcommand is an error (7554f238, closes #126)
- subcommands can optionally negate parent requirements (4a4229f5, closes #123)
v0.8.6 (2015-05-17)
Bug Fixes
- args
-
can now be parsed as a value for an argument (bc12e78e, closes #121)
v0.8.5 (2015-05-15)
Bug Fixes
- macros makes macro errors consistent with others (0c264a8c, closes #118)
Features
- macros
- arg_enum! and simple_enum! provide a Vec<&str> of variant names (30fa87ba, closes #119)
- arg_enum! and simple_enum! auto-implement Display (d1219f0d, closes #120)
v0.8.4 (2015-05-12)
Bug Fixes
- suggestions --help and --version now get suggestions (d2b3b1fa, closes #116)
v0.8.3 (2015-05-10)
Bug Fixes
- usage groups unfold their members in usage strings (55d15582, closes #114)
Performance
- usage removes unneeded allocations (fd53cd18)
v0.8.2 (2015-05-08)
Bug Fixes
- usage strings positional arguments are presented in index order (eb0e374e, closes #112)
v0.8.1 (2015-05-06)
Bug Fixes
- subcommands stops parsing multiple values when subcommands are found (fc79017e, closes #109)
Improvements
- color reduces color in error messages (aab44cca, closes #110)
- suggestions adds suggested arguments to usage strings (99447414)
v0.8.0 (2015-05-06)
Bug Fixes
- did-you-mean for review (0535cfb0)
- Positional positionals were ignored if they matched a subcmd, even after ‘--’ (90e7b081)
- help fixes bug where space between arg and help is too long (632fb115)
Features
- from_usage adds ability to add value names or num of vals in usage string (3d581976, closes #98)
- did-you-mean
- Flags adds suggestions functionality (8745071c)
- errors colorizes output red on error (f8b26b13)
Improvements
- arg_enum allows ascii case insensitivity for enum variants (b249f965, closes #104)
- clap-test simplified
make test
invocation (d17dcb29)
Documentation
- README adds details about optional and new features (960389de)
- clap fix typos caught by codespell (8891d929)
- from_usage explains new usage strings with multiple values (05476fc6)
v0.7.6 (2015-05-05)
Improvements
- Options adds number of values to options in help/usage (c1c993c4)
Features
- from_usage adds ability to add value names or num of vals in usage string (ad55748c, closes #98)
Bug Fixes
- MultipleValues properly distinguishes between multiple values and multiple occurrences (dd2a7564, closes #99)
- help fixes tab alignment with multiple values (847001ff)
Documentation
- from_usage explains new usage strings with multiple values (5a3a42df)
v0.7.5 (2015-05-04)
Bug Fixes
- Options fixes bug where options with no value don't error out (a1fb94be)
v0.7.4 (2015-05-03)
Bug Fixes
- Options fixes a bug where option arguments in succession get their values skipped (f66334d0)
v0.7.3 (2015-05-03)
Bug Fixes
- RequiredValues fixes a bug where missing values are parsed as missing arguments (93c4a723)
Improvements
- ErrorMessages improves error messages and corrections (a29c3983)
- ArgGroups improves requirement and confliction support for groups (c236dc5f)
v0.7.2 (2015-05-03)
Bug Fixes
- RequiredArgs fixes bug where required-by-default arguments are not listed in usage (12aea961, closes #96)
v0.7.1 (2015-05-01)
Bug Fixes
- MultipleValues stops evaluating values if the max or exact number of values was reached (86d92c9f)
v0.7.0 (2015-04-30) - BREAKING CHANGE
Bug Fixes
- from_usage removes bug where usage strings have no help text (ad4e5451, closes #83)
Features
- MultipleValues
- add support for minimum and maximum number of values (53f6b8c9)
- adds support limited number and named values (ae09f05e)
- implement shorthand for options with multiple values (6669f0a9)
- arg allow other types besides Vec for multiple value settings (BREAKING CHANGE 0cc2f698, closes #87)
- usage implement smart usage strings on errors (d77048ef, closes #88)
v0.6.9 (2015-04-29)
Bug Fixes
- from_usage removes bug where usage strings have no help text (ad4e5451, closes #83)
0.6.8 (2015-04-27)
Bug Fixes
- help change long help --long=long -> --long (1e25abfc)
- RequiredArgs required by default args should no longer be required when their exclusions are present (4bb4c3cc)
Features
- ArgGroups add ability to create arg groups (09eb4d98)
v0.6.7 (2015-04-22)
Bug Fixes
- from_usage fix bug causing args to not be required (b76129e9)
Features
- apps add ability to display additional help info after auto-gen'ed help msg (65cc259e)
v0.6.6 (2015-04-19)
Bug Fixes
- from_usage tabs and spaces should be treated equally (4fd44181)
Features
- macros.rs add macro to get version from Cargo.toml (c630969a)
v0.6.5 (2015-04-19)
Bug Fixes
- macros.rs fix use statements for trait impls (86e4075e)
v0.6.4 (2015-04-17)
Features
- macros add ability to create enums pub or priv with derives (2c499f80)
v0.6.3 (2015-04-16)
Features
- macros add macro to create custom enums to use as types (fb672aff)
v0.6.2 (2015-04-14)
Features
- macros
- add ability to get multiple typed values or exit (0b87251f)
- add ability to get a typed multiple values (e243fe38)
- add convenience macro to get a typed value or exit (4b7cd3ea)
- add convenience macro to get a typed value (8752700f)
v0.6.1 (2015-04-13)
Bug Fixes
- from_usage trim all whitespace before parsing (91d29045)
v0.6.0 (2015-04-13)
Bug Fixes
Features
- app add support for building args from usage strings (d5d48bcf)
- args add ability to create basic arguments from a usage string (ab409a8f)
v0.5.14 (2015-04-10)
Bug Fixes
- usage
- remove unneeded space (51372789)
- remove warning about unused variables (ba817b9d)
Features
- usage add ability to get usage string for subcommands too (3636afc4)
v0.5.13 (2015-04-09)
Features
- SubCommands add method to get name and subcommand matches together (64e53928)
- ArgMatches add method to get default usage string (02462150)
v0.5.12 (2015-04-08)
Features
- help sort arguments by name so as to not display a random order (f4b2bf57)
v0.5.11 (2015-04-08)
Bug Fixes
- flags fix bug not allowing users to specify -v or -h (90e72cff)
v0.5.10 (2015-04-08)
Bug Fixes
- help fix spacing when option argument has not long version (ca17fa49)
v0.5.9 (2015-04-08)
Bug Fixes
- positional args all previous positional args become required when a latter one is required (c14c3f31, closes #50)
- clap remove unstable features for Rust 1.0 (9abdb438)
- args improve error messages for arguments with mutual exclusions (18dbcf37, closes #51)
v0.5.8 (2015-04-08)
Bug Fixes
- option args fix bug in getting the wrong number of occurrences for options (82ad6ad7)
- help fix formatting for option arguments with no long (e8691004)
- flags add assertion to catch flags with specific value sets (a0a2a40f, closes #52)
- args improve error messages for arguments with mutual exclusions (bff945fc, closes #51)
- tests add missing .takes_value(true) to option2 (bdb0e88f)
- positional args all previous positional args become required when a latter one is required (343d47dc, closes #50)
v0.5.7 (2015-04-08)
Bug Fixes
- args fix bug in arguments who are required and mutually exclusive (6ceb88a5)
v0.5.6 (2015-04-08)
Bug Fixes
- help fix formatting of help and usage (28691b52)
v0.5.5 (2015-04-08)
Bug Fixes
- help fix formatting of help for flags and options (6ec10115)
v0.5.4 (2015-04-08)
Features
- help add ‘...’ to indicate multiple values supported (297ddba7)
v0.5.3 (2015-04-08)
Features
- positionals
- add assertions for positional args with multiple vals (b7fa72d4)
- add support for multiple values (80784009)
v0.5.2 (2015-04-08)
Bug Fixes
- apps allow use of hyphens in application and subcommand names (da549dcb)
v0.5.1 (2015-04-08)
Bug Fixes
- args determine if the only arguments allowed are also required (0a09eb36)
v0.5.0 (2015-04-08)
Features
- args add support for a specific set of allowed values on options or positional arguments (270eb889)
v0.4.18 (2015-04-08)
Bug Fixes
- usage display required args in usage, even if only required by others (1b7316d4)
Features
- subcommands properly list subcommands in help and usage (4ee02344)
v0.4.17 (2015-04-08)
Bug Fixes
- tests remove cargo test from claptests makefile (1cf73817)
v0.4.16 (2015-04-08)
Bug Fixes
- option fix bug with option occurrence values (9af52e93)
- tests fix testing script bug and formatting (d8f03a55)
Features
- arg allow lifetimes other than 'static in arguments (9e8c1fb9)