Skip to content

Commit

Permalink
fix: Always ensure num_args is initialized
Browse files Browse the repository at this point in the history
As we move people off takes_value/multiple_values, this will provide
something to check.

This was previously blocked on other issues related to flag handling
(clap-rs#4023)
  • Loading branch information
epage committed Aug 4, 2022
1 parent dc5ce00 commit 479ca76
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
8 changes: 8 additions & 0 deletions src/builder/arg.rs
Expand Up @@ -3984,6 +3984,14 @@ impl<'help> Arg<'help> {
if val_names_len > 1 {
self.settings.set(ArgSettings::MultipleValues);
self.num_vals.get_or_insert(val_names_len.into());
} else {
if self.is_multiple_values_set() {
self.num_vals.get_or_insert((1..).into());
} else if self.is_takes_value_set() {
self.num_vals.get_or_insert(1.into());
} else {
self.num_vals.get_or_insert(0.into());
}
}
}

Expand Down
15 changes: 9 additions & 6 deletions src/builder/debug_asserts.rs
Expand Up @@ -692,12 +692,15 @@ fn assert_arg(arg: &Arg) {

if let Some(num_vals) = arg.get_num_args() {
// This can be the cause of later asserts, so put this first
let num_val_names = arg.get_value_names().unwrap_or(&[]).len();
if num_vals.max_values() < num_val_names {
panic!(
"Argument {}: Too many value names ({}) compared to number_of_values ({})",
arg.name, num_val_names, num_vals
);
if num_vals != 0.into() {
// HACK: Don't check for flags to make the derive easier
let num_val_names = arg.get_value_names().unwrap_or(&[]).len();
if num_vals.max_values() < num_val_names {
panic!(
"Argument {}: Too many value names ({}) compared to number_of_values ({})",
arg.name, num_val_names, num_vals
);
}
}

assert_eq!(
Expand Down

0 comments on commit 479ca76

Please sign in to comment.