From 9d77e3fc7c14de9438d4fe825d9946da7defd4c0 Mon Sep 17 00:00:00 2001 From: pwygab <88221256+merelymyself@users.noreply.github.com> Date: Sat, 15 Oct 2022 21:28:54 +0800 Subject: [PATCH] Improve erroring of `config nu` and `config env` (#6730) * improve errors for `config nu` and `config env` * fix tests --- .../nu-command/src/env/config/config_env.rs | 6 ++--- crates/nu-command/src/env/config/config_nu.rs | 6 ++--- crates/nu-command/src/system/run_external.rs | 22 ++++++++++++++++--- .../nu-command/tests/commands/source_env.rs | 4 ++-- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/crates/nu-command/src/env/config/config_env.rs b/crates/nu-command/src/env/config/config_env.rs index ec41bf2537..294de0108d 100644 --- a/crates/nu-command/src/env/config/config_env.rs +++ b/crates/nu-command/src/env/config/config_env.rs @@ -37,7 +37,7 @@ impl Command for ConfigEnv { &self, engine_state: &EngineState, stack: &mut Stack, - _call: &Call, + call: &Call, input: PipelineData, ) -> Result { let env_vars_str = env_to_strings(engine_state, stack)?; @@ -59,7 +59,7 @@ impl Command for ConfigEnv { let name = Spanned { item: get_editor(engine_state, stack)?, - span: Span { start: 0, end: 0 }, + span: call.head, }; let args = vec![Spanned { @@ -76,6 +76,6 @@ impl Command for ConfigEnv { env_vars: env_vars_str, }; - command.run_with_input(engine_state, stack, input) + command.run_with_input(engine_state, stack, input, true) } } diff --git a/crates/nu-command/src/env/config/config_nu.rs b/crates/nu-command/src/env/config/config_nu.rs index 55a6c98ab6..da88d08177 100644 --- a/crates/nu-command/src/env/config/config_nu.rs +++ b/crates/nu-command/src/env/config/config_nu.rs @@ -37,7 +37,7 @@ impl Command for ConfigNu { &self, engine_state: &EngineState, stack: &mut Stack, - _call: &Call, + call: &Call, input: PipelineData, ) -> Result { let env_vars_str = env_to_strings(engine_state, stack)?; @@ -59,7 +59,7 @@ impl Command for ConfigNu { let name = Spanned { item: get_editor(engine_state, stack)?, - span: Span { start: 0, end: 0 }, + span: call.head, }; let args = vec![Spanned { @@ -76,6 +76,6 @@ impl Command for ConfigNu { env_vars: env_vars_str, }; - command.run_with_input(engine_state, stack, input) + command.run_with_input(engine_state, stack, input, true) } } diff --git a/crates/nu-command/src/system/run_external.rs b/crates/nu-command/src/system/run_external.rs index 5e5b9adf6e..05d0c6b84c 100644 --- a/crates/nu-command/src/system/run_external.rs +++ b/crates/nu-command/src/system/run_external.rs @@ -109,7 +109,7 @@ impl Command for External { redirect_stderr, env_vars: env_vars_str, }; - command.run_with_input(engine_state, stack, input) + command.run_with_input(engine_state, stack, input, false) } fn examples(&self) -> Vec { @@ -144,6 +144,7 @@ impl ExternalCommand { engine_state: &EngineState, stack: &mut Stack, input: PipelineData, + reconfirm_command_name: bool, ) -> Result { let head = self.name.span; @@ -262,8 +263,23 @@ impl ExternalCommand { let suggestion = suggest_command(&self.name.item, engine_state); let label = match suggestion { - Some(s) => format!("did you mean '{s}'?"), - None => "can't run executable".into(), + Some(s) => { + if reconfirm_command_name { + format!( + "'{}' was not found, did you mean '{s}'?", + self.name.item + ) + } else { + format!("did you mean '{s}'?") + } + } + None => { + if reconfirm_command_name { + format!("executable '{}' was not found", self.name.item) + } else { + "executable was not found".into() + } + } }; Err(ShellError::ExternalCommand( diff --git a/crates/nu-command/tests/commands/source_env.rs b/crates/nu-command/tests/commands/source_env.rs index ace33f25b7..0b5e3ee4ed 100644 --- a/crates/nu-command/tests/commands/source_env.rs +++ b/crates/nu-command/tests/commands/source_env.rs @@ -284,12 +284,12 @@ fn source_env_is_scoped() { let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; "))); - assert!(actual.err.contains("can't run executable")); + assert!(actual.err.contains("executable was not found")); let inp = &[r#"source-env spam.nu"#, r#"nor-similar-to-this"#]; let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; "))); - assert!(actual.err.contains("can't run executable")); + assert!(actual.err.contains("executable was not found")); }) }