mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 14:22:34 +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(
|
||||
&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 !(self.cmd.is_args_conflicts_with_subcommands_set() && valid_arg_found) {
|
||||
let candidates = suggestions::did_you_mean(
|
||||
&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 must be a subcommand.
|
||||
if self.cmd.has_subcommands()
|
||||
&& (!self.cmd.has_positionals() || self.cmd.is_infer_subcommands_set())
|
||||
{
|
||||
return ClapError::unrecognized_subcommand(
|
||||
self.cmd,
|
||||
arg_os.display().to_string(),
|
||||
Usage::new(self.cmd).create_usage_with_title(&[]),
|
||||
);
|
||||
// If the argument must be a subcommand.
|
||||
if self.cmd.has_subcommands()
|
||||
&& (!self.cmd.has_positionals() || self.cmd.is_infer_subcommands_set())
|
||||
{
|
||||
return ClapError::unrecognized_subcommand(
|
||||
self.cmd,
|
||||
arg_os.display().to_string(),
|
||||
Usage::new(self.cmd).create_usage_with_title(&[]),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let suggested_trailing_arg = !trailing_values
|
||||
|
|
|
@ -705,11 +705,7 @@ fn args_negate_subcommands_two_levels() {
|
|||
#[cfg(feature = "error-context")]
|
||||
fn subcommand_conflict_error_message() {
|
||||
static CONFLICT_ERR: &str = "\
|
||||
error: The subcommand 'sub1' wasn't recognized
|
||||
|
||||
Did you mean 'sub1'?
|
||||
|
||||
If you believe you received this message in error, try re-running with 'test -- sub1'
|
||||
error: Found argument 'sub1' which wasn't expected, or isn't valid in this context
|
||||
|
||||
Usage: test [OPTIONS]
|
||||
test <COMMAND>
|
||||
|
|
Loading…
Reference in a new issue