diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 9b7f9a9f..dc99e32e 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -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 diff --git a/tests/builder/conflicts.rs b/tests/builder/conflicts.rs index b94137ea..1644b86f 100644 --- a/tests/builder/conflicts.rs +++ b/tests/builder/conflicts.rs @@ -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