From 2143608b5d7ceb361ba351ad216cbd3a5fb5df90 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 9 Jan 2025 14:25:12 -0500 Subject: [PATCH] Fix duplicated `Fix with Assistant` code actions (#22911) This PR fixes the duplicated `Fix with Assistant` code actions that were being shown in the code actions menu. This fix isn't 100% ideal, as there is an edge case in buffers that are already open when the workspace loads, as we may not observe the feature flags in time to register the code action providers by the time we receive the event that an item was added to the workspace. Closes https://github.com/zed-industries/zed/issues/22400. Release Notes: - Fixed duplicate "Fix with Assistant" entries showing in the code action list. --- crates/assistant/src/inline_assistant.rs | 19 +++++++++++++++---- crates/assistant2/src/inline_assistant.rs | 14 +++++++++++--- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/crates/assistant/src/inline_assistant.rs b/crates/assistant/src/inline_assistant.rs index 04bf7982ef261f100a6a707005e3187ed5516a66..4f43f92edec31eaafd36f977c393156330c97b36 100644 --- a/crates/assistant/src/inline_assistant.rs +++ b/crates/assistant/src/inline_assistant.rs @@ -16,7 +16,9 @@ use editor::{ EditorStyle, ExcerptId, ExcerptRange, GutterDimensions, MultiBuffer, MultiBufferSnapshot, ToOffset as _, ToPoint, }; -use feature_flags::{FeatureFlagAppExt as _, ZedPro}; +use feature_flags::{ + Assistant2FeatureFlag, FeatureFlagAppExt as _, FeatureFlagViewExt as _, ZedPro, +}; use fs::Fs; use futures::{ channel::mpsc, @@ -70,10 +72,19 @@ pub fn init( ) { cx.set_global(InlineAssistant::new(fs, prompt_builder, telemetry)); cx.observe_new_views(|_, cx| { - let workspace = cx.view().clone(); - InlineAssistant::update_global(cx, |inline_assistant, cx| { - inline_assistant.register_workspace(&workspace, cx) + cx.observe_flag::({ + |is_assistant2_enabled, _view, cx| { + if is_assistant2_enabled { + // Assistant2 enabled, nothing to do for Assistant1. + } else { + let workspace = cx.view().clone(); + InlineAssistant::update_global(cx, |inline_assistant, cx| { + inline_assistant.register_workspace(&workspace, cx) + }) + } + } }) + .detach(); }) .detach(); } diff --git a/crates/assistant2/src/inline_assistant.rs b/crates/assistant2/src/inline_assistant.rs index bd1c7bf3fb6f4fad19978ffa2b40bee7db68a6c2..4367b3641ac5db224b3a29f5603d8c7e68f34fa7 100644 --- a/crates/assistant2/src/inline_assistant.rs +++ b/crates/assistant2/src/inline_assistant.rs @@ -19,6 +19,7 @@ use editor::{ Anchor, AnchorRangeExt, CodeActionProvider, Editor, EditorEvent, ExcerptId, ExcerptRange, GutterDimensions, MultiBuffer, MultiBufferSnapshot, ToOffset as _, ToPoint, }; +use feature_flags::{Assistant2FeatureFlag, FeatureFlagViewExt as _}; use fs::Fs; use util::ResultExt; @@ -50,10 +51,17 @@ pub fn init( ) { cx.set_global(InlineAssistant::new(fs, prompt_builder, telemetry)); cx.observe_new_views(|_workspace: &mut Workspace, cx| { - let workspace = cx.view().clone(); - InlineAssistant::update_global(cx, |inline_assistant, cx| { - inline_assistant.register_workspace(&workspace, cx) + cx.observe_flag::({ + |is_assistant2_enabled, _view, cx| { + if is_assistant2_enabled { + let workspace = cx.view().clone(); + InlineAssistant::update_global(cx, |inline_assistant, cx| { + inline_assistant.register_workspace(&workspace, cx) + }) + } + } }) + .detach(); }) .detach(); }