diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dc207f0f69a..c67687d90717 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Replace `Arg::number_of_values` (average across occurrences) with `Arg::num_args` (per occurrence, raw CLI args, not parsed values) - `num_args(0)` no longer implies `takes_value(true).multiple_values(true)` - `num_args(1)` no longer implies `multiple_values(true)` + - Does not check default values, only what the user explicitly passes in +- Sometimes `Arg::default_missing_value` didn't require `num_args(0..=1)`, now it does - Replace `Arg::min_values` (across all occurrences) with `Arg::num_args(N..)` (per occurrence) - Replace `Arg::max_values` (across all occurrences) with `Arg::num_args(1..=M)` (per occurrence) - Replace `Arg::multiple_values(true)` with `Arg::num_args(1..)` and `Arg::multiple_values(false)` with `Arg::num_args(0)` diff --git a/src/parser/parser.rs b/src/parser/parser.rs index e8fd3328f1f4..13db57e8920f 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -1127,6 +1127,10 @@ impl<'help, 'cmd> Parser<'help, 'cmd> { ident, source ); + + // `default_missing_values` does not count (ie to avoid problems with flags) + self.verify_num_args(arg, &raw_vals)?; + if raw_vals.is_empty() { // We assume this case is valid: require equals, but min_vals == 0. if !arg.default_missing_vals.is_empty() { @@ -1148,8 +1152,6 @@ impl<'help, 'cmd> Parser<'help, 'cmd> { }; } - self.verify_num_args(arg, &raw_vals)?; - match arg.get_action() { ArgAction::Set => { if source == ValueSource::CommandLine diff --git a/tests/builder/default_missing_vals.rs b/tests/builder/default_missing_vals.rs index e0b8541cbf78..b325af279393 100644 --- a/tests/builder/default_missing_vals.rs +++ b/tests/builder/default_missing_vals.rs @@ -171,6 +171,7 @@ fn default_missing_value_flag_value() { Arg::new("flag") .long("flag") .action(ArgAction::Set) + .num_args(0..=1) .default_value("false") .default_missing_value("true"), ); diff --git a/tests/builder/default_vals.rs b/tests/builder/default_vals.rs index faa8b4d9a7ef..fdf157ed1865 100644 --- a/tests/builder/default_vals.rs +++ b/tests/builder/default_vals.rs @@ -874,6 +874,7 @@ fn missing_with_value_delimiter() { Arg::new("option") .long("option") .value_delimiter(';') + .num_args(0..=1) .default_missing_values(&["value1;value2;value3", "value4;value5"]), );