diff --git a/crates/nu-command/tests/commands/ls.rs b/crates/nu-command/tests/commands/ls.rs index a8d602b53b..48158653db 100644 --- a/crates/nu-command/tests/commands/ls.rs +++ b/crates/nu-command/tests/commands/ls.rs @@ -652,7 +652,7 @@ fn list_ignores_ansi() { let actual = nu!( cwd: dirs.test(), pipeline( " - ls | find .txt | each {|| ls $in.name } + ls | find .txt | each {|| ls $in.name } " )); @@ -661,14 +661,17 @@ fn list_ignores_ansi() { } #[test] -fn list_unknown_flag() { +fn list_unknown_long_flag() { + let actual = nu!("ls --full-path"); + + assert!(actual.err.contains("Did you mean: `--full-paths`?")); +} + +#[test] +fn list_unknown_short_flag() { let actual = nu!("ls -r"); - assert!( - actual - .err - .contains("Available flags: --help(-h), --all(-a),") - ); + assert!(actual.err.contains("Use `--help` to see available flags")); } #[test] diff --git a/crates/nu-parser/src/parser.rs b/crates/nu-parser/src/parser.rs index 9c9522b474..91dc4720b5 100644 --- a/crates/nu-parser/src/parser.rs +++ b/crates/nu-parser/src/parser.rs @@ -15,7 +15,7 @@ use nu_engine::DIR_VAR_PARSER_INFO; use nu_protocol::{ BlockId, DeclId, DidYouMean, ENV_VARIABLE_ID, FilesizeUnit, Flag, IN_VARIABLE_ID, ParseError, PositionalArg, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, VarId, ast::*, - casing::Casing, engine::StateWorkingSet, eval_const::eval_constant, + casing::Casing, did_you_mean, engine::StateWorkingSet, eval_const::eval_constant, }; use std::{ collections::{HashMap, HashSet}, @@ -641,11 +641,14 @@ fn parse_long_flag( } } } else { + let suggestion = did_you_mean(sig.get_names(), &long_name) + .map(|name| format!("Did you mean: `--{name}`?")) + .unwrap_or("Use `--help` to see available flags".to_owned()); working_set.error(ParseError::UnknownFlag( sig.name.clone(), long_name.clone(), arg_span, - sig.clone().formatted_flags(), + suggestion, )); ( Some(Spanned { @@ -725,7 +728,7 @@ fn parse_short_flags( sig.name.clone(), format!("-{}", String::from_utf8_lossy(contents)), *first, - sig.clone().formatted_flags(), + "Use `--help` to see available flags".to_owned(), )); } diff --git a/crates/nu-protocol/src/signature.rs b/crates/nu-protocol/src/signature.rs index 08d93b07ca..bdbd6d2d94 100644 --- a/crates/nu-protocol/src/signature.rs +++ b/crates/nu-protocol/src/signature.rs @@ -624,37 +624,6 @@ impl Signature { examples, }) } - - pub fn formatted_flags(self) -> String { - if self.named.len() < 11 { - let mut s = "Available flags:".to_string(); - for flag in self.named { - if let Some(short) = flag.short { - let _ = write!(s, " --{}(-{}),", flag.long, short); - } else { - let _ = write!(s, " --{},", flag.long); - } - } - s.remove(s.len() - 1); - let _ = write!(s, ". Use `--help` for more information."); - s - } else { - let mut s = "Some available flags:".to_string(); - for flag in self.named { - if let Some(short) = flag.short { - let _ = write!(s, " --{}(-{}),", flag.long, short); - } else { - let _ = write!(s, " --{},", flag.long); - } - } - s.remove(s.len() - 1); - let _ = write!( - s, - "... Use `--help` for a full list of flags and more information." - ); - s - } - } } #[derive(Clone)]