From ebf845f4315cb74e0db8bdfd1426d16e56a9498a Mon Sep 17 00:00:00 2001 From: Kangaxx-0 <85712372+Kangaxx-0@users.noreply.github.com> Date: Tue, 2 Aug 2022 16:40:07 -0700 Subject: [PATCH] Change how to identify custom comamnd (#6187) Co-authored-by: Frank --- crates/nu-command/src/core_commands/help.rs | 4 ++-- crates/nu-command/src/system/which_.rs | 2 +- crates/nu-engine/src/eval.rs | 4 ++-- crates/nu-parser/src/known_external.rs | 4 ++++ crates/nu-protocol/src/engine/command.rs | 10 ++++++++++ 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/crates/nu-command/src/core_commands/help.rs b/crates/nu-command/src/core_commands/help.rs index 0c1816078..eddb83bdd 100644 --- a/crates/nu-command/src/core_commands/help.rs +++ b/crates/nu-command/src/core_commands/help.rs @@ -142,7 +142,7 @@ fn help( cols.push("is_custom".into()); vals.push(Value::Bool { - val: decl.get_block_id().is_some(), + val: decl.is_custom_command(), span: head, }); @@ -243,7 +243,7 @@ fn help( cols.push("is_custom".into()); vals.push(Value::Bool { - val: decl.get_block_id().is_some(), + val: decl.is_custom_command(), span: head, }); diff --git a/crates/nu-command/src/system/which_.rs b/crates/nu-command/src/system/which_.rs index fe09f8bf5..baddb0f8b 100644 --- a/crates/nu-command/src/system/which_.rs +++ b/crates/nu-command/src/system/which_.rs @@ -95,7 +95,7 @@ fn get_entry_in_aliases(engine_state: &EngineState, name: &str, span: Span) -> O fn get_entry_in_commands(engine_state: &EngineState, name: &str, span: Span) -> Option { if let Some(decl_id) = engine_state.find_decl(name.as_bytes(), &[]) { - let (msg, is_builtin) = if engine_state.get_decl(decl_id).get_block_id().is_some() { + let (msg, is_builtin) = if engine_state.get_decl(decl_id).is_custom_command() { ("Nushell custom command", false) } else { ("Nushell built-in command", true) diff --git a/crates/nu-engine/src/eval.rs b/crates/nu-engine/src/eval.rs index 81971b44c..51da07a1e 100644 --- a/crates/nu-engine/src/eval.rs +++ b/crates/nu-engine/src/eval.rs @@ -1101,7 +1101,7 @@ pub fn create_scope( cols.push("is_builtin".to_string()); // we can only be a is_builtin or is_custom, not both vals.push(Value::Bool { - val: decl.get_block_id().is_none(), + val: !decl.is_custom_command(), span, }); @@ -1119,7 +1119,7 @@ pub fn create_scope( cols.push("is_custom".to_string()); vals.push(Value::Bool { - val: decl.get_block_id().is_some(), + val: decl.is_custom_command(), span, }); diff --git a/crates/nu-parser/src/known_external.rs b/crates/nu-parser/src/known_external.rs index 70ac93f82..ea40daf4f 100644 --- a/crates/nu-parser/src/known_external.rs +++ b/crates/nu-parser/src/known_external.rs @@ -30,6 +30,10 @@ impl Command for KnownExternal { true } + fn is_builtin(&self) -> bool { + false + } + fn run( &self, engine_state: &EngineState, diff --git a/crates/nu-protocol/src/engine/command.rs b/crates/nu-protocol/src/engine/command.rs index 56f4fad5f..7d9d0242e 100644 --- a/crates/nu-protocol/src/engine/command.rs +++ b/crates/nu-protocol/src/engine/command.rs @@ -37,6 +37,16 @@ pub trait Command: Send + Sync + CommandClone { false } + // This is an enhanced method to determine if a command is custom command or not + // since extern "foo" [] and def "foo" [] behaves differently + fn is_custom_command(&self) -> bool { + if self.get_block_id().is_some() { + true + } else { + self.is_known_external() + } + } + // Is a sub command fn is_sub(&self) -> bool { self.name().contains(' ')