fix: Always ensure num_args is initialized

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
(#4023)
This commit is contained in:
Ed Page 2022-08-03 16:44:03 -05:00
parent dc5ce00162
commit 479ca76491
2 changed files with 17 additions and 6 deletions

View file

@ -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());
}
}
}

View file

@ -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!(