Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #18778 from Veykril/push-oontvoqmxkno
fix: Fix flycheck diagnostics flickering for binary targets
Lukas Wirth 2024-12-29
parent d3bb15e · parent cf30743 · commit dc6cea5
-rw-r--r--crates/rust-analyzer/src/flycheck.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/flycheck.rs b/crates/rust-analyzer/src/flycheck.rs
index 53c145f884..c7bb275c5f 100644
--- a/crates/rust-analyzer/src/flycheck.rs
+++ b/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()),