From d8f682113eb8b65481ae618c422f03b09d612901 Mon Sep 17 00:00:00 2001 From: kubouch Date: Mon, 10 Jun 2024 21:29:27 +0300 Subject: [PATCH] Fix engine state reference passed to menus --- crates/nu-cli/src/reedline_config.rs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/crates/nu-cli/src/reedline_config.rs b/crates/nu-cli/src/reedline_config.rs index 73df1e44e0..86fbb1a3c8 100644 --- a/crates/nu-cli/src/reedline_config.rs +++ b/crates/nu-cli/src/reedline_config.rs @@ -95,6 +95,7 @@ pub(crate) fn add_menus( ]; let mut engine_state = (*engine_state_ref).clone(); + let mut menu_eval_results = vec![]; for (name, definition) in default_menus { if !config @@ -118,13 +119,27 @@ pub(crate) fn add_menus( let mut temp_stack = Stack::new().capture(); let input = PipelineData::Empty; - let res = eval_block::(&engine_state, &mut temp_stack, &block, input)?; + menu_eval_results.push(eval_block::( + &engine_state, + &mut temp_stack, + &block, + input, + )?); + } + } - if let PipelineData::Value(value, None) = res { - for menu in create_menus(&value)? { - line_editor = - add_menu(line_editor, &menu, engine_state_ref.clone(), stack, config)?; - } + let new_engine_state_ref = Arc::new(engine_state); + + for res in menu_eval_results.into_iter() { + if let PipelineData::Value(value, None) = res { + for menu in create_menus(&value)? { + line_editor = add_menu( + line_editor, + &menu, + new_engine_state_ref.clone(), + stack, + config, + )?; } } }