From dd73ff4ee4e6ca1447c46fe05d557e9d1d1b393c Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Mon, 6 Jan 2025 13:44:30 +0100 Subject: [PATCH] fix: Fix non-cargo flychecks immediately clearing received diagnostics --- crates/rust-analyzer/src/flycheck.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/rust-analyzer/src/flycheck.rs b/crates/rust-analyzer/src/flycheck.rs index 15656e0745dd..d1cf40f868b9 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>, diagnostics_cleared_for: FxHashSet>, + 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; } }