diff --git a/crates/assistant/src/inline_assistant.rs b/crates/assistant/src/inline_assistant.rs index 9fddb283cee322d92a7b9ee96b19ae93d06aadab..50d6f9f5919b572d8c1c7da5002b34ad904c6f1f 100644 --- a/crates/assistant/src/inline_assistant.rs +++ b/crates/assistant/src/inline_assistant.rs @@ -1567,7 +1567,6 @@ impl Render for PromptEditor { ] } }); - let fs_clone = self.fs.clone(); h_flex() .key_context("PromptEditor") @@ -1590,12 +1589,15 @@ impl Render for PromptEditor { .w(gutter_dimensions.full_width() + (gutter_dimensions.margin / 2.0)) .justify_center() .gap_2() - .child(inline_language_model_selector(move |model, cx| { - update_settings_file::( - fs_clone.clone(), - cx, - move |settings, _| settings.set_model(model.clone()), - ); + .child(inline_language_model_selector({ + let fs = self.fs.clone(); + move |model, cx| { + update_settings_file::( + fs.clone(), + cx, + move |settings, _| settings.set_model(model.clone()), + ); + } })) .map(|el| { let CodegenStatus::Error(error) = self.codegen.read(cx).status(cx) else { diff --git a/crates/assistant/src/terminal_inline_assistant.rs b/crates/assistant/src/terminal_inline_assistant.rs index d661bbbf775305af8f640166283a90301de58c0a..29016d6c3a740a8f51b83bdeebbc3e3177df9e8c 100644 --- a/crates/assistant/src/terminal_inline_assistant.rs +++ b/crates/assistant/src/terminal_inline_assistant.rs @@ -624,8 +624,6 @@ impl Render for PromptEditor { } }; - let fs_clone = self.fs.clone(); - h_flex() .bg(cx.theme().colors().editor_background) .border_y_1() @@ -643,12 +641,15 @@ impl Render for PromptEditor { .w_12() .justify_center() .gap_2() - .child(inline_language_model_selector(move |model, cx| { - update_settings_file::( - fs_clone.clone(), - cx, - move |settings, _| settings.set_model(model.clone()), - ); + .child(inline_language_model_selector({ + let fs = self.fs.clone(); + move |model, cx| { + update_settings_file::( + fs.clone(), + cx, + move |settings, _| settings.set_model(model.clone()), + ); + } })) .children( if let CodegenStatus::Error(error) = &self.codegen.read(cx).status { diff --git a/crates/assistant2/src/assistant_model_selector.rs b/crates/assistant2/src/assistant_model_selector.rs index beb77f4553c2a354d4607074e0ee84aeb34ef3cd..52d18c97ca65581b105a2fe3d314d259e32bc194 100644 --- a/crates/assistant2/src/assistant_model_selector.rs +++ b/crates/assistant2/src/assistant_model_selector.rs @@ -33,17 +33,19 @@ impl AssistantModelSelector { impl Render for AssistantModelSelector { fn render(&mut self, _: &mut Window, cx: &mut Context) -> impl IntoElement { - let fs_clone = self.fs.clone(); assistant_language_model_selector( self.focus_handle.clone(), Some(self.menu_handle.clone()), cx, - move |model, cx| { - update_settings_file::( - fs_clone.clone(), - cx, - move |settings, _| settings.set_model(model.clone()), - ); + { + let fs = self.fs.clone(); + move |model, cx| { + update_settings_file::( + fs.clone(), + cx, + move |settings, _| settings.set_model(model.clone()), + ); + } }, ) } diff --git a/crates/assistant_context_editor/src/context_editor.rs b/crates/assistant_context_editor/src/context_editor.rs index d7dd9e4d834328e0b17e917e81902bab84590c4a..b90626d79df549f7e4d203ff13a7cea653eed234 100644 --- a/crates/assistant_context_editor/src/context_editor.rs +++ b/crates/assistant_context_editor/src/context_editor.rs @@ -2818,7 +2818,6 @@ impl Render for ContextEditor { } else { None }; - let fs_clone = self.fs.clone(); let language_model_selector = self.language_model_selector.clone(); v_flex() @@ -2877,12 +2876,17 @@ impl Render for ContextEditor { self.editor().focus_handle(cx), Some(self.language_model_selector.clone()), cx, - move |model, cx| { - update_settings_file::( - fs_clone.clone(), - cx, - move |settings, _| settings.set_model(model.clone()), - ); + { + let fs = self.fs.clone(); + move |model, cx| { + update_settings_file::( + fs.clone(), + cx, + move |settings, _| { + settings.set_model(model.clone()) + }, + ); + } }, ))), ) diff --git a/crates/language_model_selector/src/language_model_selector.rs b/crates/language_model_selector/src/language_model_selector.rs index 8d4281faf37da54794b7ab3e91c8940ccbb778a5..83bd9a43dc3cffbae5ab753f1d997320fd9b9de6 100644 --- a/crates/language_model_selector/src/language_model_selector.rs +++ b/crates/language_model_selector/src/language_model_selector.rs @@ -484,17 +484,17 @@ impl PickerDelegate for LanguageModelPickerDelegate { } pub fn inline_language_model_selector( - f: impl Fn(Arc, &App) + 'static, -) -> AnyElement { - let f = Rc::new(f); + on_model_changed: impl Fn(Arc, &App) + 'static, +) -> PopoverMenu { + let on_model_changed = Rc::new(on_model_changed); PopoverMenu::new("popover-button") .menu(move |window, cx| { Some(cx.new(|cx| { LanguageModelSelector::new( { - let f = f.clone(); + let on_model_changed = on_model_changed.clone(); move |model, cx| { - f(model, cx); + on_model_changed(model, cx); } }, window, @@ -524,36 +524,34 @@ pub fn inline_language_model_selector( }, ) .anchor(gpui::Corner::TopRight) - // .when_some(menu_handle, |el, handle| el.with_handle(handle)) .offset(gpui::Point { x: px(0.0), y: px(-2.0), }) - .into_any_element() } pub fn assistant_language_model_selector( keybinding_target: FocusHandle, menu_handle: Option>, cx: &App, - f: impl Fn(Arc, &App) + 'static, -) -> AnyElement { + on_model_changed: impl Fn(Arc, &App) + 'static, +) -> PopoverMenu { let active_model = LanguageModelRegistry::read_global(cx).active_model(); let model_name = match active_model { Some(model) => model.name().0, _ => SharedString::from("No model selected"), }; - let f = Rc::new(f); + let on_model_changed = Rc::new(on_model_changed); PopoverMenu::new("popover-button") .menu(move |window, cx| { Some(cx.new(|cx| { LanguageModelSelector::new( { - let f = f.clone(); + let on_model_changed = on_model_changed.clone(); move |model, cx| { - f(model, cx); + on_model_changed(model, cx); } }, window, @@ -594,5 +592,4 @@ pub fn assistant_language_model_selector( x: px(0.0), y: px(-2.0), }) - .into_any_element() }