diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 182e205cc2..f23df06eb7 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -475,7 +475,10 @@ impl Project { fn add_worktree(&mut self, worktree: ModelHandle, cx: &mut ModelContext) { cx.observe(&worktree, |_, _, cx| cx.notify()).detach(); - cx.subscribe(&worktree, |_, worktree, event, cx| match event { + cx.subscribe(&worktree, |this, worktree, event, cx| match event { + worktree::Event::LanguageRegistered => { + this.diagnose(cx); + } worktree::Event::DiagnosticsUpdated(path) => { cx.emit(Event::DiagnosticsUpdated(ProjectPath { worktree_id: worktree.id(), diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 86bdeae706..82a0755223 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -68,6 +68,7 @@ pub enum Worktree { #[derive(Debug)] pub enum Event { + LanguageRegistered, DiagnosticsUpdated(Arc), } @@ -1060,6 +1061,7 @@ impl LocalWorktree { ) -> Option> { if !self.languages.iter().any(|l| Arc::ptr_eq(l, language)) { self.languages.push(language.clone()); + cx.emit(Event::LanguageRegistered); } if let Some(server) = self.language_servers.get(language.name()) {