From f0a1a4b600bda65aa229ab26fbb0142caebd1535 Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:06:08 -0700 Subject: [PATCH] Revert "Avoid endless loop of the diagnostic updates (#21209)" (cherry-pick #21764) (#21767) Cherry-picked Revert "Avoid endless loop of the diagnostic updates (#21209)" (#21764) This reverts commit 9999c31859210654dd572d54dfa42b67c00b33b0. Release Notes: - Fixes diagnostics not updating in some circumstances Co-authored-by: Conrad Irwin --- crates/diagnostics/src/diagnostics.rs | 43 +++++++++------------------ crates/project/src/lsp_store.rs | 15 ---------- 2 files changed, 14 insertions(+), 44 deletions(-) diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 48a92d906ea3ba075ad7b1f5b889bea2235a8e36..776755dafb29c59016db4f01bda57023a6be1e04 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -134,27 +134,16 @@ impl ProjectDiagnosticsEditor { language_server_id, path, } => { - let max_severity = this.max_severity(); - let has_diagnostics_to_display = project.read(cx).lsp_store().read(cx).diagnostics_for_buffer(path) - .into_iter().flatten() - .filter(|(server_id, _)| language_server_id == server_id) - .flat_map(|(_, diagnostics)| diagnostics) - .any(|diagnostic| diagnostic.diagnostic.severity <= max_severity); - - if has_diagnostics_to_display { - this.paths_to_update - .insert((path.clone(), Some(*language_server_id))); - this.summary = project.read(cx).diagnostic_summary(false, cx); - cx.emit(EditorEvent::TitleChanged); - - if this.editor.focus_handle(cx).contains_focused(cx) || this.focus_handle.contains_focused(cx) { - log::debug!("diagnostics updated for server {language_server_id}, path {path:?}. recording change"); - } else { - log::debug!("diagnostics updated for server {language_server_id}, path {path:?}. updating excerpts"); - this.update_stale_excerpts(cx); - } + this.paths_to_update + .insert((path.clone(), Some(*language_server_id))); + this.summary = project.read(cx).diagnostic_summary(false, cx); + cx.emit(EditorEvent::TitleChanged); + + if this.editor.focus_handle(cx).contains_focused(cx) || this.focus_handle.contains_focused(cx) { + log::debug!("diagnostics updated for server {language_server_id}, path {path:?}. recording change"); } else { - log::debug!("diagnostics updated for server {language_server_id}, path {path:?}. no diagnostics to display"); + log::debug!("diagnostics updated for server {language_server_id}, path {path:?}. updating excerpts"); + this.update_stale_excerpts(cx); } } _ => {} @@ -340,12 +329,16 @@ impl ProjectDiagnosticsEditor { ExcerptId::min() }; - let max_severity = self.max_severity(); let path_state = &mut self.path_states[path_ix]; let mut new_group_ixs = Vec::new(); let mut blocks_to_add = Vec::new(); let mut blocks_to_remove = HashSet::default(); let mut first_excerpt_id = None; + let max_severity = if self.include_warnings { + DiagnosticSeverity::WARNING + } else { + DiagnosticSeverity::ERROR + }; let excerpts_snapshot = self.excerpts.update(cx, |excerpts, cx| { let mut old_groups = mem::take(&mut path_state.diagnostic_groups) .into_iter() @@ -634,14 +627,6 @@ impl ProjectDiagnosticsEditor { prev_path = Some(path); } } - - fn max_severity(&self) -> DiagnosticSeverity { - if self.include_warnings { - DiagnosticSeverity::WARNING - } else { - DiagnosticSeverity::ERROR - } - } } impl FocusableView for ProjectDiagnosticsEditor { diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 41a3ccc0a30490dba5e2c8017d049baf58c37690..6120f4ae754242b0ca2dd07d1fb7d5893a3823c1 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -2919,21 +2919,6 @@ impl LspStore { }) } - pub fn diagnostics_for_buffer( - &self, - path: &ProjectPath, - ) -> Option< - &[( - LanguageServerId, - Vec>>, - )], - > { - self.diagnostics - .get(&path.worktree_id)? - .get(&path.path) - .map(|diagnostics| diagnostics.as_slice()) - } - pub fn started_language_servers(&self) -> Vec<(WorktreeId, LanguageServerName)> { self.language_server_ids.keys().cloned().collect() }