refactor(help): Consolidate value printing

This commit is contained in:
Ed Page 2022-08-25 13:07:32 -05:00
parent e00abc6905
commit 0e0c5eb218

View file

@ -4104,42 +4104,34 @@ impl fmt::Debug for Arg {
pub(crate) fn render_arg_val(arg: &Arg) -> String { pub(crate) fn render_arg_val(arg: &Arg) -> String {
let mut rendered = String::new(); let mut rendered = String::new();
let delim = " "; let num_vals = arg.get_num_args().expect(INTERNAL_ERROR_MSG);
let val_names = if arg.val_names.is_empty() { let mut val_names = if arg.val_names.is_empty() {
vec![arg.id.as_internal_str().to_owned()] vec![arg.id.as_internal_str().to_owned()]
} else { } else {
arg.val_names.clone() arg.val_names.clone()
}; };
let mut extra_values = false;
debug_assert!(arg.is_takes_value_set());
let num_vals = arg.get_num_args().expect(INTERNAL_ERROR_MSG);
if val_names.len() == 1 { if val_names.len() == 1 {
let arg_name = format!("<{}>", val_names[0]);
let min = num_vals.min_values().max(1); let min = num_vals.min_values().max(1);
for n in 1..=min { let val_name = val_names.pop().unwrap();
if n != 1 { val_names = vec![val_name; min];
rendered.push_str(delim);
} }
rendered.push_str(&arg_name);
} debug_assert!(arg.is_takes_value_set());
extra_values |= min < num_vals.max_values();
} else {
debug_assert!(1 < val_names.len());
for (n, val_name) in val_names.iter().enumerate() { for (n, val_name) in val_names.iter().enumerate() {
let arg_name = format!("<{}>", val_name); let arg_name = format!("<{}>", val_name);
if n != 0 { if n != 0 {
rendered.push_str(delim); rendered.push(' ');
} }
rendered.push_str(&arg_name); rendered.push_str(&arg_name);
} }
let mut extra_values = false;
extra_values |= val_names.len() < num_vals.max_values(); extra_values |= val_names.len() < num_vals.max_values();
}
if arg.is_positional() && matches!(*arg.get_action(), ArgAction::Append) { if arg.is_positional() && matches!(*arg.get_action(), ArgAction::Append) {
extra_values = true; extra_values = true;
} }
if extra_values { if extra_values {
rendered.push_str("..."); rendered.push_str("...");
} }