mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 06:42:33 +00:00
fix(parser): Be less confusing with args/subcommand conflicts
The new error message still isn't great but its better than the old one. Reported at https://hachyderm.io/@eminence/109548978776785113
This commit is contained in:
parent
2a374db639
commit
453ac0bfb9
2 changed files with 28 additions and 30 deletions
|
@ -502,33 +502,35 @@ impl<'cmd> Parser<'cmd> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let candidates = suggestions::did_you_mean(
|
if !(self.cmd.is_args_conflicts_with_subcommands_set() && valid_arg_found) {
|
||||||
&arg_os.display().to_string(),
|
let candidates = suggestions::did_you_mean(
|
||||||
self.cmd.all_subcommand_names(),
|
&arg_os.display().to_string(),
|
||||||
);
|
self.cmd.all_subcommand_names(),
|
||||||
// If the argument looks like a subcommand.
|
|
||||||
if !candidates.is_empty() {
|
|
||||||
return ClapError::invalid_subcommand(
|
|
||||||
self.cmd,
|
|
||||||
arg_os.display().to_string(),
|
|
||||||
candidates,
|
|
||||||
self.cmd
|
|
||||||
.get_bin_name()
|
|
||||||
.unwrap_or_else(|| self.cmd.get_name())
|
|
||||||
.to_owned(),
|
|
||||||
Usage::new(self.cmd).create_usage_with_title(&[]),
|
|
||||||
);
|
);
|
||||||
}
|
// If the argument looks like a subcommand.
|
||||||
|
if !candidates.is_empty() {
|
||||||
|
return ClapError::invalid_subcommand(
|
||||||
|
self.cmd,
|
||||||
|
arg_os.display().to_string(),
|
||||||
|
candidates,
|
||||||
|
self.cmd
|
||||||
|
.get_bin_name()
|
||||||
|
.unwrap_or_else(|| self.cmd.get_name())
|
||||||
|
.to_owned(),
|
||||||
|
Usage::new(self.cmd).create_usage_with_title(&[]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// If the argument must be a subcommand.
|
// If the argument must be a subcommand.
|
||||||
if self.cmd.has_subcommands()
|
if self.cmd.has_subcommands()
|
||||||
&& (!self.cmd.has_positionals() || self.cmd.is_infer_subcommands_set())
|
&& (!self.cmd.has_positionals() || self.cmd.is_infer_subcommands_set())
|
||||||
{
|
{
|
||||||
return ClapError::unrecognized_subcommand(
|
return ClapError::unrecognized_subcommand(
|
||||||
self.cmd,
|
self.cmd,
|
||||||
arg_os.display().to_string(),
|
arg_os.display().to_string(),
|
||||||
Usage::new(self.cmd).create_usage_with_title(&[]),
|
Usage::new(self.cmd).create_usage_with_title(&[]),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let suggested_trailing_arg = !trailing_values
|
let suggested_trailing_arg = !trailing_values
|
||||||
|
|
|
@ -705,11 +705,7 @@ fn args_negate_subcommands_two_levels() {
|
||||||
#[cfg(feature = "error-context")]
|
#[cfg(feature = "error-context")]
|
||||||
fn subcommand_conflict_error_message() {
|
fn subcommand_conflict_error_message() {
|
||||||
static CONFLICT_ERR: &str = "\
|
static CONFLICT_ERR: &str = "\
|
||||||
error: The subcommand 'sub1' wasn't recognized
|
error: Found argument 'sub1' which wasn't expected, or isn't valid in this context
|
||||||
|
|
||||||
Did you mean 'sub1'?
|
|
||||||
|
|
||||||
If you believe you received this message in error, try re-running with 'test -- sub1'
|
|
||||||
|
|
||||||
Usage: test [OPTIONS]
|
Usage: test [OPTIONS]
|
||||||
test <COMMAND>
|
test <COMMAND>
|
||||||
|
|
Loading…
Reference in a new issue