From 19adfdf8bb84b09ad27c229163115ad4af590dd2 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 25 Oct 2022 11:35:59 +0200 Subject: [PATCH] Match progress token's prefix to detect disk-based diagnostic progress The new version of rust-analyzer changed the disk-based diagnostic token to `rust-analyzer/checkOnSave/0`. The trailing number could be different from 0 when there are multiple Rust projects open using the same rust-analyzer instance. As such, with this commit we will perform a prefix match as opposed to a strict equality check when detecting a disk-based diagnostics progress token. --- crates/project/src/project.rs | 7 +++++-- crates/project/src/project_tests.rs | 6 ++++-- crates/zed/src/languages/rust.rs | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index f05b7e6728a3273f77705daa69a28941e7d198c1..3abd027a9a68289d2dda94cbfce78323636cde26 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -2262,8 +2262,11 @@ impl Project { return; } - let is_disk_based_diagnostics_progress = - Some(token.as_ref()) == disk_based_diagnostics_progress_token.as_deref(); + let is_disk_based_diagnostics_progress = disk_based_diagnostics_progress_token + .as_ref() + .map_or(false, |disk_based_token| { + token.starts_with(disk_based_token) + }); match progress { lsp::WorkDoneProgress::Begin(report) => { diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index a9ac5f4411469e6466ded12b6762526dbc783658..ca274b18b8a37f74d9587470c2a9877d900505e8 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -644,7 +644,9 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) { let mut events = subscribe(&project, cx); let fake_server = fake_servers.next().await.unwrap(); - fake_server.start_progress(progress_token).await; + fake_server + .start_progress(format!("{}/0", progress_token)) + .await; assert_eq!( events.next().await.unwrap(), Event::DiskBasedDiagnosticsStarted { @@ -670,7 +672,7 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) { } ); - fake_server.end_progress(progress_token); + fake_server.end_progress(format!("{}/0", progress_token)); assert_eq!( events.next().await.unwrap(), Event::DiskBasedDiagnosticsFinished { diff --git a/crates/zed/src/languages/rust.rs b/crates/zed/src/languages/rust.rs index f5776f342097c11f6ad5906f1e09469bd5e63051..ba51fda253981eae6c2df57388fff1ae45a60452 100644 --- a/crates/zed/src/languages/rust.rs +++ b/crates/zed/src/languages/rust.rs @@ -93,7 +93,7 @@ impl LspAdapter for RustLspAdapter { } async fn disk_based_diagnostics_progress_token(&self) -> Option { - Some("rustAnalyzer/cargo check".into()) + Some("rust-analyzer/checkOnSave".into()) } async fn process_diagnostics(&self, params: &mut lsp::PublishDiagnosticsParams) {