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.
This commit is contained in:
Andrew Gallant
2017-03-12 22:30:54 -04:00
parent 68af3bbdc4
commit 95bc678403
2 changed files with 15 additions and 10 deletions

View File

@@ -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);
}