about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2025-01-06 12:58:53 +0000
committerGitHub <noreply@github.com>2025-01-06 12:58:53 +0000
commitd0db5035156882fbe12f32d5b8f09e22b7bb5be5 (patch)
tree5c3cc77a2dc445a1018b521358b001f5abfc5db0
parent43b44cf128a7b578907449eedd8936913621c514 (diff)
parent29c21d87d05b39dbc8a062318d86311edb33f9de (diff)
downloadrust-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.rs8
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;
         }
     }