Skip to content

Commit 50b27e5

Browse files
committed
Better error messages when the proc-macro-server fails to start
1 parent aeb0774 commit 50b27e5

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

crates/rust-analyzer/src/cli/load_cargo.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ pub fn load_workspace(
6060

6161
let proc_macro_client = if load_config.with_proc_macro {
6262
let path = AbsPathBuf::assert(std::env::current_exe()?);
63-
Some(ProcMacroServer::spawn(path, &["proc-macro"]).unwrap())
63+
Ok(ProcMacroServer::spawn(path, &["proc-macro"]).unwrap())
6464
} else {
65-
None
65+
Err("proc macro server not started".to_owned())
6666
};
6767

6868
let crate_graph = ws.to_crate_graph(
@@ -89,7 +89,7 @@ pub fn load_workspace(
8989
if load_config.prefill_caches {
9090
host.analysis().parallel_prime_caches(1, |_| {})?;
9191
}
92-
Ok((host, vfs, proc_macro_client))
92+
Ok((host, vfs, proc_macro_client.ok()))
9393
}
9494

9595
fn load_crate_graph(

crates/rust-analyzer/src/global_state.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ pub(crate) struct GlobalState {
6161
pub(crate) proc_macro_changed: bool,
6262
pub(crate) last_reported_status: Option<lsp_ext::ServerStatusParams>,
6363
pub(crate) source_root_config: SourceRootConfig,
64-
pub(crate) proc_macro_clients: Vec<Option<ProcMacroServer>>,
64+
pub(crate) proc_macro_clients: Vec<Result<ProcMacroServer, String>>,
6565

6666
pub(crate) flycheck: Vec<FlycheckHandle>,
6767
pub(crate) flycheck_sender: Sender<flycheck::Message>,

crates/rust-analyzer/src/reload.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -306,16 +306,16 @@ impl GlobalState {
306306
if self.proc_macro_clients.is_empty() {
307307
if let Some((path, args)) = self.config.proc_macro_srv() {
308308
self.proc_macro_clients = (0..self.workspaces.len())
309-
.map(|_| match ProcMacroServer::spawn(path.clone(), args.clone()) {
310-
Ok(it) => Some(it),
311-
Err(err) => {
312-
tracing::error!(
309+
.map(|_| {
310+
ProcMacroServer::spawn(path.clone(), args.clone()).map_err(|err| {
311+
let error = format!(
313312
"Failed to run proc_macro_srv from path {}, error: {:?}",
314313
path.display(),
315314
err
316315
);
317-
None
318-
}
316+
tracing::error!(error);
317+
error
318+
})
319319
})
320320
.collect();
321321
}
@@ -539,14 +539,14 @@ impl SourceRootConfig {
539539
/// Load the proc-macros for the given lib path, replacing all expanders whose names are in `dummy_replace`
540540
/// with an identity dummy expander.
541541
pub(crate) fn load_proc_macro(
542-
server: Option<&ProcMacroServer>,
542+
server: Result<&ProcMacroServer, &String>,
543543
path: &AbsPath,
544544
dummy_replace: &[Box<str>],
545545
) -> ProcMacroLoadResult {
546546
let res: Result<Vec<_>, String> = (|| {
547547
let dylib = MacroDylib::new(path.to_path_buf())
548548
.map_err(|io| format!("Proc-macro dylib loading failed: {io}"))?;
549-
let server = server.ok_or_else(|| format!("Proc-macro server not started"))?;
549+
let server = server.map_err(ToOwned::to_owned)?;
550550
let vec = server.load_dylib(dylib).map_err(|e| format!("{e}"))?;
551551
if vec.is_empty() {
552552
return Err("proc macro library returned no proc macros".to_string());

0 commit comments

Comments
 (0)