diff options
author | Andrew Gallant <jamslam@gmail.com> | 2017-03-12 22:30:54 -0400 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2017-03-12 22:30:54 -0400 |
commit | 95bc678403b63d98b717636e79fdfbabc8949c8a (patch) | |
tree | 6d653125b9d02876c67a4eb374569582845239fc | |
parent | 68af3bbdc450cc5bc1feb2d5a689783107d364fa (diff) |
Fix interaction with clap.
Previously, `get_matches` would return even if --help or --version was
given, and we could check for them manually. That behavior seems to have
changed. Instead, we must use get_matches_safe to inspect the error to
determine what happened.
We can't use the same process for -V/--version since clap will
unconditionally print its own version info. Instead, we rename (internally)
the version flag so that clap doesn't interfere.
-rw-r--r-- | src/app.rs | 6 | ||||
-rw-r--r-- | src/args.rs | 19 |
2 files changed, 15 insertions, 10 deletions
@@ -68,12 +68,12 @@ fn app<F>(next_line_help: bool, doc: F) -> App<'static, 'static> // consistent with short/long views. .arg(arg("help-short").short("h")) .arg(flag("help")) - .arg(flag("version").short("V")) + .arg(arg("ripgrep-version").long("version").short("V")) // First, set up primary positional/flag arguments. .arg(arg("pattern") .required_unless_one(&[ "file", "files", "help-short", "help", "regexp", "type-list", - "version", + "ripgrep-version", ])) .arg(arg("path").multiple(true)) .arg(flag("regexp").short("e") @@ -206,7 +206,7 @@ lazy_static! { doc!(h, "help", "Show verbose help output.", "When given, more details about flags are provided."); - doc!(h, "version", + doc!(h, "ripgrep-version", "Prints version information."); doc!(h, "pattern", diff --git a/src/args.rs b/src/args.rs index 148ae8b7..0b1aaa9a 100644 --- a/src/args.rs +++ b/src/args.rs @@ -88,18 +88,23 @@ impl Args { /// /// Also, initialize a global logger. pub fn parse() -> Result<Args> { - let matches = app::app_short().get_matches(); + use clap::ErrorKind::*; + + let matches = match app::app_short().get_matches_safe() { + Ok(matches) => matches, + Err(clap::Error { kind: HelpDisplayed, .. }) => { + let _ = ::app::app_long().print_help(); + println!(""); + process::exit(0); + } + Err(err) => err.exit(), + }; if matches.is_present("help-short") { let _ = ::app::app_short().print_help(); println!(""); process::exit(0); } - if matches.is_present("help") { - let _ = ::app::app_long().print_help(); - println!(""); - process::exit(0); - } - if matches.is_present("version") { + if matches.is_present("ripgrep-version") { println!("ripgrep {}", crate_version!()); process::exit(0); } |