Merge pull request #4027 from epage/name

fix: Always ensure `num_args` is initialized
This commit is contained in:
Ed Page 2022-08-04 09:25:38 -05:00 committed by GitHub
commit 14c8f333cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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!(