From 4880721b730e449f40c34bf978183dcc61b12158 Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Fri, 22 Sep 2023 10:53:25 -0500 Subject: [PATCH] evaluate `$nu` during `--ide-check` (#10470) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description This PR fixes a bug found by @kubouch where `$nu` is not evaluated as a constant when the `--ide-check` parameter is passed to nushell for the LSP-like functionality. Not quite sure my changes are proper but it seems to work! ### Before ![image](https://github.com/nushell/nushell/assets/343840/72ba28fe-74a1-450a-8a75-8d152c3a15b1) ### After ![image](https://github.com/nushell/nushell/assets/343840/1f70985b-4350-4e3f-8708-0aead3f5a505) # User-Facing Changes # Tests + Formatting # After Submitting --------- Co-authored-by: Jakub Žádník --- src/ide.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ide.rs b/src/ide.rs index 3b5f366699..fb445cb961 100644 --- a/src/ide.rs +++ b/src/ide.rs @@ -1,10 +1,10 @@ use miette::IntoDiagnostic; use nu_cli::NuCompleter; use nu_parser::{flatten_block, parse, FlatShape}; -use nu_protocol::report_error; use nu_protocol::{ engine::{EngineState, Stack, StateWorkingSet}, - DeclId, ShellError, Span, Value, VarId, + eval_const::create_nu_constant, + report_error, DeclId, ShellError, Span, Value, VarId, NU_VARIABLE_ID, }; use reedline::Completer; use serde_json::{json, Value as JsonValue}; @@ -77,6 +77,16 @@ fn read_in_file<'a>( pub fn check(engine_state: &mut EngineState, file_path: &str, max_errors: &Value) { let cwd = std::env::current_dir().expect("Could not get current working directory."); engine_state.add_env_var("PWD".into(), Value::test_string(cwd.to_string_lossy())); + let working_set = StateWorkingSet::new(engine_state); + + let nu_const = match create_nu_constant(engine_state, Span::unknown()) { + Ok(nu_const) => nu_const, + Err(err) => { + report_error(&working_set, &err); + std::process::exit(1); + } + }; + engine_state.set_variable_const_val(NU_VARIABLE_ID, nu_const); let mut working_set = StateWorkingSet::new(engine_state); let file = std::fs::read(file_path);