From 0ff2c81bb94417cd0e0b91d97443b59893e539ae Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Wed, 25 Aug 2021 17:56:39 +0200 Subject: [PATCH] Fix reporting of build script errors --- crates/project_model/src/build_scripts.rs | 4 ++++ crates/rust-analyzer/src/reload.rs | 24 ++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/crates/project_model/src/build_scripts.rs b/crates/project_model/src/build_scripts.rs index fb8cc271c51f..7ed7de04fbe2 100644 --- a/crates/project_model/src/build_scripts.rs +++ b/crates/project_model/src/build_scripts.rs @@ -196,6 +196,10 @@ impl WorkspaceBuildScripts { Ok(res) } + + pub fn error(&self) -> Option<&str> { + self.error.as_deref() + } } // FIXME: File a better way to know if it is a dylib. diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index cc32b0e2febe..efac6d686874 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs @@ -445,19 +445,29 @@ impl GlobalState { } fn fetch_build_data_error(&self) -> Option { - let mut buf = String::new(); + let mut buf = "rust-analyzer failed to run build scripts:\n".to_string(); + let mut has_errors = false; for ws in &self.fetch_build_data_queue.last_op_result().1 { - if let Err(err) = ws { - stdx::format_to!(buf, "rust-analyzer failed to run custom build: {:#}\n", err); + match ws { + Ok(data) => { + if let Some(err) = data.error() { + has_errors = true; + stdx::format_to!(buf, "{:#}\n", err); + } + } + Err(err) => { + has_errors = true; + stdx::format_to!(buf, "{:#}\n", err); + } } } - if buf.is_empty() { - return None; + if has_errors { + Some(buf) + } else { + None } - - Some(buf) } fn reload_flycheck(&mut self) {