diff options
author | Andrew Gallant <jamslam@gmail.com> | 2018-02-05 19:22:44 -0500 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2018-02-06 12:07:59 -0500 |
commit | 8cb5833ef9fd6c4c351d10a3e950339fa89adf49 (patch) | |
tree | 28310d7b592cc453371f06ead06a1d657f241038 /src | |
parent | 85cd3f0a6e72a1d75c37be7b8ee4677a6bcc3f3d (diff) |
argv: update clap to 2.29.4
We use the new AppSettings::AllArgsOverrideSelf to permit all flags to
be specified multiple times. This removes the need for our previous
work-around where we would enable `multiple` for every flag and then
just extract the last value when consuming clap's matches.
We also add a couple regression tests that ensure repeated switches and
flags work as expected.
Diffstat (limited to 'src')
-rw-r--r-- | src/app.rs | 9 | ||||
-rw-r--r-- | src/args.rs | 4 |
2 files changed, 5 insertions, 8 deletions
@@ -67,6 +67,7 @@ pub fn app() -> App<'static, 'static> { .about(ABOUT) .max_term_width(100) .setting(AppSettings::UnifiedHelpMessage) + .setting(AppSettings::AllArgsOverrideSelf) .usage(USAGE) .template(TEMPLATE) .help_message("Prints help information. Use --help for more details."); @@ -250,8 +251,7 @@ impl RGArg { /// inspect the number of times the switch is used. fn switch(long_name: &'static str) -> RGArg { let claparg = Arg::with_name(long_name) - .long(long_name) - .multiple(true); + .long(long_name); RGArg { claparg: claparg, name: long_name, @@ -280,7 +280,6 @@ impl RGArg { .long(long_name) .value_name(value_name) .takes_value(true) - .multiple(true) .number_of_values(1); RGArg { claparg: claparg, @@ -351,11 +350,8 @@ impl RGArg { // document it distinct for each different kind. See RGArgKind docs. match self.kind { RGArgKind::Positional { ref mut multiple, .. } => { - self.claparg = self.claparg.multiple(true); *multiple = true; } - // We don't need to modify clap's state in the following cases - // because all switches and flags always have `multiple` enabled. RGArgKind::Switch { ref mut multiple, .. } => { *multiple = true; } @@ -363,6 +359,7 @@ impl RGArg { *multiple = true; } } + self.claparg = self.claparg.multiple(true); self } diff --git a/src/args.rs b/src/args.rs index d0990fdc..0c25727f 100644 --- a/src/args.rs +++ b/src/args.rs @@ -994,7 +994,7 @@ impl<'a> ArgMatches<'a> { } fn value_of_lossy(&self, name: &str) -> Option<String> { - self.values_of_lossy(name).and_then(|mut vals| vals.pop()) + self.0.value_of_lossy(name).map(|s| s.into_owned()) } fn values_of_lossy(&self, name: &str) -> Option<Vec<String>> { @@ -1002,7 +1002,7 @@ impl<'a> ArgMatches<'a> { } fn value_of_os(&'a self, name: &str) -> Option<&'a OsStr> { - self.values_of_os(name).and_then(|it| it.last()) + self.0.value_of_os(name) } fn values_of_os(&'a self, name: &str) -> Option<clap::OsValues<'a>> { |