about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Richey <davidrichey@fb.com>2025-04-24 22:59:39 -0500
committerDavid Richey <davidrichey@fb.com>2025-04-24 22:59:39 -0500
commit1993def51ec463dd37c91072dd4c8ec34734c5f7 (patch)
tree7dea6b083632ec7f62f6496fb212a4a28ec6c9df
parent00732c093644a2a45dc3e1aae3183411b5aad3d3 (diff)
downloadrust-1993def51ec463dd37c91072dd4c8ec34734c5f7.tar.gz
rust-1993def51ec463dd37c91072dd4c8ec34734c5f7.zip
Always error when failed to parse DiscoverProjectMessage
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/discover.rs26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/discover.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/discover.rs
index 6b87505fc73..67ddc41f3b2 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/discover.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/discover.rs
@@ -7,7 +7,6 @@ use ide_db::FxHashMap;
 use paths::{AbsPathBuf, Utf8Path, Utf8PathBuf};
 use project_model::ProjectJsonData;
 use serde::{Deserialize, Serialize};
-use serde_json::Value;
 use tracing::{info_span, span::EnteredSpan};
 
 use crate::command::{CargoParser, CommandHandle};
@@ -121,18 +120,19 @@ struct DiscoverProjectParser;
 
 impl CargoParser<DiscoverProjectMessage> for DiscoverProjectParser {
     fn from_line(&self, line: &str, _error: &mut String) -> Option<DiscoverProjectMessage> {
-        // can the line even be deserialized as JSON?
-        let Ok(data) = serde_json::from_str::<Value>(line) else {
-            let err = DiscoverProjectData::Error { error: line.to_owned(), source: None };
-            return Some(DiscoverProjectMessage::new(err));
-        };
-
-        let Ok(data) = serde_json::from_value::<DiscoverProjectData>(data) else {
-            return None;
-        };
-
-        let msg = DiscoverProjectMessage::new(data);
-        Some(msg)
+        match serde_json::from_str::<DiscoverProjectData>(line) {
+            Ok(data) => {
+                let msg = DiscoverProjectMessage::new(data);
+                Some(msg)
+            }
+            Err(err) => {
+                let err = DiscoverProjectData::Error {
+                    error: format!("{:#?}\n{}", err, line),
+                    source: None,
+                };
+                Some(DiscoverProjectMessage::new(err))
+            }
+        }
     }
 
     fn from_eof(&self) -> Option<DiscoverProjectMessage> {