about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Kirszenberg <alexandre@amo.co>2025-01-07 11:11:04 +0100
committerAlex Kirszenberg <alexandre@amo.co>2025-01-07 11:11:04 +0100
commit929496521799f8e479ec3cafc63eec14e54c97e4 (patch)
tree76c9079483f5c68e951f6bd259977c1dec83b3a0 /src
parent9344334b19c6123933af222bef1d714aff3ada0c (diff)
downloadrust-929496521799f8e479ec3cafc63eec14e54c97e4.tar.gz
rust-929496521799f8e479ec3cafc63eec14e54c97e4.zip
fix: Fix diagnostics not clearing between flychecks
Diffstat (limited to 'src')
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs16
1 files changed, 16 insertions, 0 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 a306302cc0e..36483699ac6 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_cleared_for_all: bool,
     diagnostics_received: bool,
 }
 
@@ -264,6 +265,7 @@ impl FlycheckActor {
             command_handle: None,
             command_receiver: None,
             diagnostics_cleared_for: Default::default(),
+            diagnostics_cleared_for_all: false,
             diagnostics_received: false,
         }
     }
@@ -350,6 +352,7 @@ impl FlycheckActor {
                             package_id: None,
                         });
                     }
+                    self.clear_diagnostics_state();
 
                     self.report_progress(Progress::DidFinish(res));
                 }
@@ -395,6 +398,14 @@ impl FlycheckActor {
                                     package_id: Some(package_id.clone()),
                                 });
                             }
+                        } else {
+                            if !self.diagnostics_cleared_for_all {
+                                self.diagnostics_cleared_for_all = true;
+                                self.send(FlycheckMessage::ClearDiagnostics {
+                                    id: self.id,
+                                    package_id: None,
+                                });
+                            }
                         }
                         self.send(FlycheckMessage::AddDiagnostic {
                             id: self.id,
@@ -420,7 +431,12 @@ impl FlycheckActor {
             self.command_receiver.take();
             self.report_progress(Progress::DidCancel);
         }
+        self.clear_diagnostics_state();
+    }
+
+    fn clear_diagnostics_state(&mut self) {
         self.diagnostics_cleared_for.clear();
+        self.diagnostics_cleared_for_all = false;
         self.diagnostics_received = false;
     }