Skip to content

Commit

Permalink
Revert "Avoid endless loop of the diagnostic updates (#21209)" (#21764)
Browse files Browse the repository at this point in the history
This reverts commit 9999c31.

Release Notes:

- Fixes diagnostics not updating in some circumstances
  • Loading branch information
ConradIrwin authored Dec 9, 2024
1 parent ef45eca commit 6538227
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 44 deletions.
43 changes: 14 additions & 29 deletions crates/diagnostics/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
_ => {}
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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 {
Expand Down
15 changes: 0 additions & 15 deletions crates/project/src/lsp_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand Down

0 comments on commit 6538227

Please sign in to comment.