Unnamed repository; edit this file 'description' to name the repository.
fix: Fix non-cargo flychecks immediately clearing received diagnostics
Lukas Wirth 2025-01-06
parent 47ee513 · commit dd73ff4
-rw-r--r--crates/rust-analyzer/src/flycheck.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/flycheck.rs b/crates/rust-analyzer/src/flycheck.rs
index 15656e0745..d1cf40f868 100644
--- a/crates/rust-analyzer/src/flycheck.rs
+++ b/crates/rust-analyzer/src/flycheck.rs
@@ -233,6 +233,7 @@ struct FlycheckActor {
/// The receiver side of the channel mentioned above.
command_receiver: Option<Receiver<CargoCheckMessage>>,
diagnostics_cleared_for: FxHashSet<Arc<PackageId>>,
+ diagnostics_received: bool,
}
#[allow(clippy::large_enum_variant)]
@@ -263,6 +264,7 @@ impl FlycheckActor {
command_handle: None,
command_receiver: None,
diagnostics_cleared_for: Default::default(),
+ diagnostics_received: false,
}
}
@@ -339,7 +341,7 @@ impl FlycheckActor {
error
);
}
- if self.diagnostics_cleared_for.is_empty() {
+ if !self.diagnostics_received {
tracing::trace!(flycheck_id = self.id, "clearing diagnostics");
// We finished without receiving any diagnostics.
// Clear everything for good measure
@@ -347,8 +349,6 @@ impl FlycheckActor {
id: self.id,
package_id: None,
});
- } else {
- self.diagnostics_cleared_for.clear();
}
self.report_progress(Progress::DidFinish(res));
@@ -382,6 +382,7 @@ impl FlycheckActor {
package_id = package_id.as_ref().map(|it| &it.repr),
"diagnostic received"
);
+ self.diagnostics_received = true;
if let Some(package_id) = &package_id {
if self.diagnostics_cleared_for.insert(package_id.clone()) {
tracing::trace!(
@@ -419,6 +420,7 @@ impl FlycheckActor {
self.command_receiver.take();
self.report_progress(Progress::DidCancel);
self.diagnostics_cleared_for.clear();
+ self.diagnostics_received = false;
}
}