about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-12-28 18:13:12 +0100
committerLukas Wirth <lukastw97@gmail.com>2024-12-28 18:16:55 +0100
commit171be2bd58d0c3714570e405d51476beefe151af (patch)
treecbf74e0d1dcfa4998bcfc034b75843c45fefca10
parenteea4a9ab9ee7fd2546f4270a773533a6a0dbe524 (diff)
downloadrust-171be2bd58d0c3714570e405d51476beefe151af.tar.gz
rust-171be2bd58d0c3714570e405d51476beefe151af.zip
fix: Fix flycheck diagnostics flickering for binary targets
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs18
1 files changed, 15 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 53c145f884e..c7bb275c5f1 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs
@@ -345,6 +345,7 @@ impl FlycheckActor {
                         );
                     }
                     if self.package_status.is_empty() {
+                        tracing::trace!(flycheck_id = self.id, "clearing diagnostics");
                         // We finished without receiving any diagnostics.
                         // That means all of them are stale.
                         self.send(FlycheckMessage::ClearDiagnostics {
@@ -354,6 +355,11 @@ impl FlycheckActor {
                     } else {
                         for (package_id, status) in mem::take(&mut self.package_status) {
                             if let DiagnosticReceived::No = status {
+                                tracing::trace!(
+                                    flycheck_id = self.id,
+                                    package_id = package_id.repr,
+                                    "clearing diagnostics"
+                                );
                                 self.send(FlycheckMessage::ClearDiagnostics {
                                     id: self.id,
                                     package_id: Some(package_id),
@@ -385,9 +391,15 @@ impl FlycheckActor {
                             "diagnostic received"
                         );
                         if let Some(package_id) = &package_id {
-                            if !self.package_status.contains_key(package_id) {
-                                self.package_status
-                                    .insert(package_id.clone(), DiagnosticReceived::Yes);
+                            if let None | Some(DiagnosticReceived::No) = self
+                                .package_status
+                                .insert(package_id.clone(), DiagnosticReceived::Yes)
+                            {
+                                tracing::trace!(
+                                    flycheck_id = self.id,
+                                    package_id = package_id.repr,
+                                    "clearing diagnostics"
+                                );
                                 self.send(FlycheckMessage::ClearDiagnostics {
                                     id: self.id,
                                     package_id: Some(package_id.clone()),