4082: Don't panic on `rust-analyzer --help` r=matklad a=eminence

Special case handling for `-h` and `--help` if no subcommand is given.

Closes #4068

Co-authored-by: Andrew Chin <achin@eminence32.net>
This commit is contained in:
bors[bot] 2020-04-22 11:55:18 +00:00 committed by GitHub
commit cb0a24104c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -75,6 +75,10 @@ pub(crate) fn parse() -> Result<Result<Args, HelpPrinted>> {
let subcommand = match matches.subcommand()? {
Some(it) => it,
None => {
if matches.contains(["-h", "--help"]) {
print_subcommands();
return Ok(Err(HelpPrinted));
}
matches.finish().or_else(handle_extra_flags)?;
return Ok(Ok(Args { verbosity, command: Command::RunServer }));
}
@ -267,8 +271,17 @@ pub(crate) fn parse() -> Result<Result<Args, HelpPrinted>> {
}
"proc-macro" => Command::ProcMacro,
_ => {
eprintln!(
"\
print_subcommands();
return Ok(Err(HelpPrinted));
}
};
Ok(Ok(Args { verbosity, command }))
}
}
fn print_subcommands() {
eprintln!(
"\
rust-analyzer
USAGE:
@ -285,12 +298,7 @@ pub(crate) fn parse() -> Result<Result<Args, HelpPrinted>> {
proc-macro
parse
symbols"
);
return Ok(Err(HelpPrinted));
}
};
Ok(Ok(Args { verbosity, command }))
}
)
}
pub(crate) struct HelpPrinted;