diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2025-01-06 12:58:53 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-06 12:58:53 +0000 |
| commit | d0db5035156882fbe12f32d5b8f09e22b7bb5be5 (patch) | |
| tree | 5c3cc77a2dc445a1018b521358b001f5abfc5db0 | |
| parent | 43b44cf128a7b578907449eedd8936913621c514 (diff) | |
| parent | 29c21d87d05b39dbc8a062318d86311edb33f9de (diff) | |
| download | rust-d0db5035156882fbe12f32d5b8f09e22b7bb5be5.tar.gz rust-d0db5035156882fbe12f32d5b8f09e22b7bb5be5.zip | |
Merge pull request #18848 from Veykril/push-kyyoskmvnutp
fix: Fix non-cargo flychecks immediately clearing received diagnostics
| -rw-r--r-- | src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs index 15656e0745d..d1cf40f868b 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs +++ b/src/tools/rust-analyzer/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; } } |
