Skip to content

Commit

Permalink
Merge pull request #4002 from epage/usage
Browse files Browse the repository at this point in the history
fix(help): Remove '...' for optional values
  • Loading branch information
epage committed Jul 29, 2022
2 parents ddef1cb + ac32c83 commit 7b8da03
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 8 deletions.
24 changes: 23 additions & 1 deletion src/builder/arg.rs
Expand Up @@ -4554,6 +4554,7 @@ pub(crate) fn render_arg_val(arg: &Arg) -> String {
rendered.push_str(&arg_name);
}
extra_values |= arg.num_vals.is_none() && arg.is_multiple_values_set();
extra_values |= min < num_vals.max_values();
} else {
debug_assert!(1 < val_names.len());
for (n, val_name) in val_names.iter().enumerate() {
Expand All @@ -4565,7 +4566,6 @@ pub(crate) fn render_arg_val(arg: &Arg) -> String {
}
extra_values |= val_names.len() < num_vals.max_values();
}
extra_values |= !num_vals.is_fixed();
if arg.is_positional() {
if matches!(*arg.get_action(), ArgAction::Append) {
extra_values = true;
Expand Down Expand Up @@ -4712,6 +4712,17 @@ mod test {
assert_eq!(o.to_string(), "-o <file>...");
}

#[test]
fn option_display_optional_value() {
let mut o = Arg::new("opt")
.long("option")
.action(ArgAction::Set)
.number_of_values(0..=1);
o._build();

assert_eq!(o.to_string(), "--option [<opt>]");
}

#[test]
fn option_display_value_names() {
let mut o = Arg::new("opt")
Expand Down Expand Up @@ -4807,6 +4818,17 @@ mod test {
assert_eq!(p.to_string(), "<pos>...");
}

#[test]
fn positional_display_optional_value() {
let mut p = Arg::new("pos")
.index(1)
.number_of_values(0..=1)
.action(ArgAction::Set);
p._build();

assert_eq!(p.to_string(), "[<pos>]");
}

#[test]
fn positional_display_multiple_occurrences() {
let mut p = Arg::new("pos").index(1).action(ArgAction::Append);
Expand Down
4 changes: 2 additions & 2 deletions tests/builder/help.rs
Expand Up @@ -227,8 +227,8 @@ OPTIONS:
--multvalsmo <one> <two> Tests multiple values, and mult occs
--minvals2 <minvals> <minvals>... Tests 2 min vals
--maxvals3 <maxvals>... Tests 3 max vals
--optvaleq[=<optval>...] Tests optional value, require = sign
--optvalnoeq [<optval>...] Tests optional value
--optvaleq[=<optval>] Tests optional value, require = sign
--optvalnoeq [<optval>] Tests optional value
-h, --help Print help information
-V, --version Print version information
Expand Down
4 changes: 2 additions & 2 deletions tests/builder/multiple_values.rs
Expand Up @@ -435,8 +435,8 @@ USAGE:
test [OPTIONS]
OPTIONS:
-p [<NUM>...]
-h, --help Print help information
-p [<NUM>]
-h, --help Print help information
";
snapbox::assert_eq(HELP, help);
}
Expand Down
3 changes: 2 additions & 1 deletion tests/derive/options.rs
Expand Up @@ -271,7 +271,8 @@ fn option_option_type_help() {
arg: Option<Option<i32>>,
}
let help = utils::get_help::<Opt>();
assert!(help.contains("--arg [<val>...]"));
assert!(help.contains("--arg [<val>]"));
assert!(!help.contains("--arg [<val>...]"));
}

#[test]
Expand Down
4 changes: 2 additions & 2 deletions tests/macros.rs
Expand Up @@ -229,8 +229,8 @@ USAGE:
test [OPTIONS]
OPTIONS:
-p [<NUM>...]
-h, --help Print help information
-p [<NUM>]
-h, --help Print help information
";
snapbox::assert_eq(HELP, help);
}
Expand Down

0 comments on commit 7b8da03

Please sign in to comment.