Do not remove worktrees after the headless server removal (#19556)

Kirill Bulatov and Conrad Irwin created

Release Notes:

- N/A

Co-authored-by: Conrad Irwin <conrad@zed.dev>

Change summary

crates/language/src/language_settings.rs | 2 +-
crates/project/src/lsp_store.rs          | 1 +
crates/project/src/project.rs            | 6 ++++--
crates/project/src/worktree_store.rs     | 5 +++++
crates/settings/src/settings_store.rs    | 2 +-
5 files changed, 12 insertions(+), 4 deletions(-)

Detailed changes

crates/language/src/language_settings.rs 🔗

@@ -831,7 +831,7 @@ impl AllLanguageSettings {
 
         let editorconfig_properties = location.and_then(|location| {
             cx.global::<SettingsStore>()
-                .editorconfg_properties(location.worktree_id, location.path)
+                .editorconfig_properties(location.worktree_id, location.path)
         });
         if let Some(editorconfig_properties) = editorconfig_properties {
             let mut settings = settings.clone();

crates/project/src/lsp_store.rs 🔗

@@ -1029,6 +1029,7 @@ impl LspStore {
                 })
                 .detach()
             }
+            WorktreeStoreEvent::WorktreeReleased(..) => {}
             WorktreeStoreEvent::WorktreeRemoved(_, id) => self.remove_worktree(*id, cx),
             WorktreeStoreEvent::WorktreeOrderChanged => {}
             WorktreeStoreEvent::WorktreeUpdateSent(worktree) => {

crates/project/src/project.rs 🔗

@@ -2223,9 +2223,11 @@ impl Project {
                 cx.emit(Event::WorktreeAdded);
             }
             WorktreeStoreEvent::WorktreeRemoved(_, id) => {
-                self.on_worktree_removed(*id, cx);
                 cx.emit(Event::WorktreeRemoved(*id));
             }
+            WorktreeStoreEvent::WorktreeReleased(_, id) => {
+                self.on_worktree_released(*id, cx);
+            }
             WorktreeStoreEvent::WorktreeOrderChanged => cx.emit(Event::WorktreeOrderChanged),
             WorktreeStoreEvent::WorktreeUpdateSent(_) => {}
         }
@@ -2261,7 +2263,7 @@ impl Project {
         cx.notify();
     }
 
-    fn on_worktree_removed(&mut self, id_to_remove: WorktreeId, cx: &mut ModelContext<Self>) {
+    fn on_worktree_released(&mut self, id_to_remove: WorktreeId, cx: &mut ModelContext<Self>) {
         if let Some(dev_server_project_id) = self.dev_server_project_id {
             let paths: Vec<String> = self
                 .visible_worktrees(cx)

crates/project/src/worktree_store.rs 🔗

@@ -62,6 +62,7 @@ pub struct WorktreeStore {
 pub enum WorktreeStoreEvent {
     WorktreeAdded(Model<Worktree>),
     WorktreeRemoved(EntityId, WorktreeId),
+    WorktreeReleased(EntityId, WorktreeId),
     WorktreeOrderChanged,
     WorktreeUpdateSent(Model<Worktree>),
 }
@@ -394,6 +395,10 @@ impl WorktreeStore {
 
         let handle_id = worktree.entity_id();
         cx.observe_release(worktree, move |this, worktree, cx| {
+            cx.emit(WorktreeStoreEvent::WorktreeReleased(
+                handle_id,
+                worktree.id(),
+            ));
             cx.emit(WorktreeStoreEvent::WorktreeRemoved(
                 handle_id,
                 worktree.id(),

crates/settings/src/settings_store.rs 🔗

@@ -968,7 +968,7 @@ impl SettingsStore {
         Ok(())
     }
 
-    pub fn editorconfg_properties(
+    pub fn editorconfig_properties(
         &self,
         for_worktree: WorktreeId,
         for_path: &Path,