From c9aa6ba0f33e76852f94eb993ad5c4798379bf0f Mon Sep 17 00:00:00 2001 From: Andrej Kolchin Date: Mon, 4 Dec 2023 18:49:36 +0000 Subject: [PATCH] Add special error for calling `metadata` on $env and $nu (#11228) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trying to call `metadata $env` or `metadata $nu` will throw an error: ```Nushell ~> metadata $nu Error: × Built-in variables `$env` and `$nu` have no metadata ╭─[entry #1:1:1] 1 │ metadata $nu · ─┬─ · ╰── no metadata available ╰──── ``` --- crates/nu-protocol/src/engine/stack.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/crates/nu-protocol/src/engine/stack.rs b/crates/nu-protocol/src/engine/stack.rs index c6c71b5f0..161cd92a1 100644 --- a/crates/nu-protocol/src/engine/stack.rs +++ b/crates/nu-protocol/src/engine/stack.rs @@ -3,6 +3,7 @@ use std::collections::{HashMap, HashSet}; use crate::engine::EngineState; use crate::engine::DEFAULT_OVERLAY_NAME; use crate::{ShellError, Span, Value, VarId}; +use crate::{ENV_VARIABLE_ID, NU_VARIABLE_ID}; /// Environment variables per overlay pub type EnvVars = HashMap>; @@ -80,6 +81,16 @@ impl Stack { } } + if var_id == NU_VARIABLE_ID || var_id == ENV_VARIABLE_ID { + return Err(ShellError::GenericError( + "Built-in variables `$env` and `$nu` have no metadata".into(), + "no metadata available".into(), + Some(span), + None, + Vec::new(), + )); + } + Err(ShellError::VariableNotFoundAtRuntime { span }) }