Revert "Avoid endless loop of the diagnostic updates (#21209)" (#21764)

Conrad Irwin created

This reverts commit 9999c31859210654dd572d54dfa42b67c00b33b0.

Release Notes:

- Fixes diagnostics not updating in some circumstances

Change summary

crates/diagnostics/src/diagnostics.rs | 43 +++++++++-------------------
crates/project/src/lsp_store.rs       | 15 ----------
2 files changed, 14 insertions(+), 44 deletions(-)

Detailed changes

crates/diagnostics/src/diagnostics.rs 🔗

@@ -138,27 +138,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);
                     }
                 }
                 _ => {}
@@ -363,12 +352,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()
@@ -657,14 +650,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 {

crates/project/src/lsp_store.rs 🔗

@@ -2950,21 +2950,6 @@ impl LspStore {
             })
     }
 
-    pub fn diagnostics_for_buffer(
-        &self,
-        path: &ProjectPath,
-    ) -> Option<
-        &[(
-            LanguageServerId,
-            Vec<DiagnosticEntry<Unclipped<PointUtf16>>>,
-        )],
-    > {
-        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()
     }