From addfb88dd64fdb3aeab132c8ec59130f90905ec9 Mon Sep 17 00:00:00 2001 From: kubouch Date: Mon, 10 Jun 2024 19:08:48 +0300 Subject: [PATCH] Fix delta not being merged when evaluating menus --- crates/nu-cli/src/reedline_config.rs | 12 ++++++++---- crates/nu-cli/src/repl.rs | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/nu-cli/src/reedline_config.rs b/crates/nu-cli/src/reedline_config.rs index 3f920a00cb..5b857c0626 100644 --- a/crates/nu-cli/src/reedline_config.rs +++ b/crates/nu-cli/src/reedline_config.rs @@ -76,7 +76,7 @@ const DEFAULT_HELP_MENU: &str = r#" // Adds all menus to line editor pub(crate) fn add_menus( mut line_editor: Reedline, - engine_state: Arc, + engine_state: &mut Arc, stack: &Stack, config: &Config, ) -> Result { @@ -100,8 +100,8 @@ pub(crate) fn add_menus( .iter() .any(|menu| menu.name.to_expanded_string("", config) == name) { - let (block, _) = { - let mut working_set = StateWorkingSet::new(&engine_state); + let (block, delta) = { + let mut working_set = StateWorkingSet::new(engine_state); let output = parse( &mut working_set, Some(name), // format!("entry #{}", entry_num) @@ -112,9 +112,13 @@ pub(crate) fn add_menus( (output, working_set.render()) }; + let _ = Arc::get_mut(engine_state) + .expect("no engine state") + .merge_delta(delta); + let mut temp_stack = Stack::new().capture(); let input = PipelineData::Empty; - let res = eval_block::(&engine_state, &mut temp_stack, &block, input)?; + let res = eval_block::(engine_state, &mut temp_stack, &block, input)?; if let PipelineData::Value(value, None) = res { for menu in create_menus(&value)? { diff --git a/crates/nu-cli/src/repl.rs b/crates/nu-cli/src/repl.rs index d9aef32bbb..dd5644fb2b 100644 --- a/crates/nu-cli/src/repl.rs +++ b/crates/nu-cli/src/repl.rs @@ -345,7 +345,7 @@ fn loop_iteration(ctx: LoopContext) -> (bool, Stack, Reedline) { use_color, ); - let engine_reference = Arc::new(engine_state.clone()); + let mut engine_reference = Arc::new(engine_state.clone()); let config = engine_state.get_config(); start_time = std::time::Instant::now(); @@ -428,7 +428,7 @@ fn loop_iteration(ctx: LoopContext) -> (bool, Stack, Reedline) { start_time = std::time::Instant::now(); trace!("adding menus"); line_editor = - add_menus(line_editor, engine_reference, &stack_arc, config).unwrap_or_else(|e| { + add_menus(line_editor, &mut engine_reference, &stack_arc, config).unwrap_or_else(|e| { report_error_new(engine_state, &e); Reedline::create() });