Merge pull request #1808 from zed-industries/fix-diagnostics-on-rust

Antonio Scandurra created

Match progress token's prefix to detect disk-based diagnostic progress

Change summary

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(-)

Detailed changes

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) => {

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 {

crates/zed/src/languages/rust.rs 🔗

@@ -93,7 +93,7 @@ impl LspAdapter for RustLspAdapter {
     }
 
     async fn disk_based_diagnostics_progress_token(&self) -> Option<String> {
-        Some("rustAnalyzer/cargo check".into())
+        Some("rust-analyzer/checkOnSave".into())
     }
 
     async fn process_diagnostics(&self, params: &mut lsp::PublishDiagnosticsParams) {