]> git.lizzy.rs Git - rust.git/commitdiff
Work around Code bug with empty diagnostics
authorLaurențiu Nicola <lnicola@dend.ro>
Mon, 18 Jul 2022 19:21:24 +0000 (22:21 +0300)
committerLaurențiu Nicola <lnicola@dend.ro>
Tue, 19 Jul 2022 04:45:31 +0000 (07:45 +0300)
crates/rust-analyzer/src/diagnostics/to_proto.rs
crates/rust-analyzer/src/handlers.rs
crates/rust-analyzer/src/main_loop.rs

index 8f779df18d3553ff21b3562f866727200be5dcd1..cff4bd7f66acdaca64197f5c0b3f9971065a657b 100644 (file)
@@ -462,11 +462,6 @@ pub(crate) fn map_rust_diagnostic_to_lsp(
                 message: "original diagnostic".to_string(),
             };
             for sub in &subdiagnostics {
-                let mut message = sub.related.message.clone();
-                // Change empty message to " ", as they greatly confuse VS Code.
-                if message.is_empty() {
-                    message = String::from(" ");
-                }
                 diagnostics.push(MappedRustDiagnostic {
                     url: sub.related.location.uri.clone(),
                     fix: sub.suggested_fix.clone(),
@@ -476,7 +471,7 @@ pub(crate) fn map_rust_diagnostic_to_lsp(
                         code: code.clone().map(lsp_types::NumberOrString::String),
                         code_description: code_description.clone(),
                         source: Some(source.clone()),
-                        message,
+                        message: sub.related.message.clone(),
                         related_information: Some(vec![back_ref.clone()]),
                         tags: None, // don't apply modifiers again
                         data: None,
index e3875228a1877539fad2058a8771bcb149db2051..520aa7d1dd4874d5370bfaeed310d796e10cb3ae 100644 (file)
@@ -1318,7 +1318,8 @@ pub(crate) fn publish_diagnostics(
                 .unwrap(),
             }),
             source: Some("rust-analyzer".to_string()),
-            message: d.message,
+            // https://github.com/rust-lang/rust-analyzer/issues/11404
+            message: if !d.message.is_empty() { d.message } else { " ".to_string() },
             related_information: None,
             tags: if d.unused { Some(vec![DiagnosticTag::UNNECESSARY]) } else { None },
             data: None,
index 49b83941119f64e84482c5aa0bbf25aeb78ab11c..0579cae4ed0d9fcb8a7f0e0d2d372da67806a37a 100644 (file)
@@ -487,7 +487,21 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
                 }
 
                 let url = file_id_to_url(&self.vfs.read().0, file_id);
-                let diagnostics = self.diagnostics.diagnostics_for(file_id).cloned().collect();
+                let mut diagnostics =
+                    self.diagnostics.diagnostics_for(file_id).cloned().collect::<Vec<_>>();
+                // https://github.com/rust-lang/rust-analyzer/issues/11404
+                for d in &mut diagnostics {
+                    if d.message.is_empty() {
+                        d.message = " ".to_string();
+                    }
+                    if let Some(rds) = d.related_information.as_mut() {
+                        for rd in rds {
+                            if rd.message.is_empty() {
+                                rd.message = " ".to_string();
+                            }
+                        }
+                    }
+                }
                 let version = from_proto::vfs_path(&url)
                     .map(|path| self.mem_docs.get(&path).map(|it| it.version))
                     .unwrap_or_default();