diff options
| author | David Richey <davidrichey@fb.com> | 2025-04-24 22:59:39 -0500 |
|---|---|---|
| committer | David Richey <davidrichey@fb.com> | 2025-04-24 22:59:39 -0500 |
| commit | 1993def51ec463dd37c91072dd4c8ec34734c5f7 (patch) | |
| tree | 7dea6b083632ec7f62f6496fb212a4a28ec6c9df | |
| parent | 00732c093644a2a45dc3e1aae3183411b5aad3d3 (diff) | |
| download | rust-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.rs | 26 |
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> { |
