diff options
| author | David Barsky <me@davidbarsky.com> | 2025-04-04 16:29:20 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-04 16:29:20 +0000 |
| commit | 2a4ab6bc5915118c5acac4f50514c17fb05d16d4 (patch) | |
| tree | 32e25bf90aae1151353a83a477012fe6861bd407 /src/tools/rust-analyzer | |
| parent | 099d0e09cf6409847dc9ceea8452e8e14c677376 (diff) | |
| parent | 4c8bb775e4a0679a77713f236555a12c494f665c (diff) | |
| download | rust-2a4ab6bc5915118c5acac4f50514c17fb05d16d4.tar.gz rust-2a4ab6bc5915118c5acac4f50514c17fb05d16d4.zip | |
Merge pull request #19523 from davidbarsky/davidbarsky/fix-salsafied-crate-graph-with-lazy-project-discovery
internal: ensure a Salsa-ified crate graph works with project discovery
Diffstat (limited to 'src/tools/rust-analyzer')
| -rw-r--r-- | src/tools/rust-analyzer/crates/hir-expand/src/lib.rs | 3 | ||||
| -rw-r--r-- | src/tools/rust-analyzer/crates/rust-analyzer/src/reload.rs | 51 |
2 files changed, 23 insertions, 31 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-expand/src/lib.rs b/src/tools/rust-analyzer/crates/hir-expand/src/lib.rs index d089d4c49eb..9dc08dda50e 100644 --- a/src/tools/rust-analyzer/crates/hir-expand/src/lib.rs +++ b/src/tools/rust-analyzer/crates/hir-expand/src/lib.rs @@ -208,7 +208,8 @@ impl ExpandErrorKind { }, None => RenderedExpandError { message: format!( - "internal error: proc-macro map is missing error entry for crate {def_crate:?}" + "internal error: proc-macro map is missing error entry for crate {:?}", + def_crate ), error: true, kind: RenderedExpandError::GENERAL_KIND, diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/reload.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/reload.rs index a80b99573ca..b73019b310d 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/reload.rs +++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/reload.rs @@ -413,35 +413,26 @@ impl GlobalState { .map(|res| res.as_ref().map_err(|e| e.to_string())) .chain(iter::repeat_with(|| Err("proc-macro-srv is not running".into()))); for (client, paths) in proc_macro_clients.zip(paths) { - paths - .into_iter() - .map(move |(crate_id, res)| { - ( - crate_id, - res.map_or_else( - |e| Err((e, true)), - |(crate_name, path)| { - progress(path.to_string()); - client.as_ref().map_err(|it| (it.clone(), true)).and_then( - |client| { - load_proc_macro( - client, - &path, - ignored_proc_macros - .iter() - .find_map(|(name, macros)| { - eq_ignore_underscore(name, &crate_name) - .then_some(&**macros) - }) - .unwrap_or_default(), - ) - }, - ) - }, - ), - ) - }) - .for_each(|(krate, res)| builder.insert(krate, res)); + for (crate_id, res) in paths.iter() { + let expansion_res = match client { + Ok(client) => match res { + Ok((crate_name, path)) => { + progress(path.to_string()); + let ignored_proc_macros = ignored_proc_macros + .iter() + .find_map(|(name, macros)| { + eq_ignore_underscore(name, crate_name).then_some(&**macros) + }) + .unwrap_or_default(); + + load_proc_macro(client, path, ignored_proc_macros) + } + Err(e) => Err((e.clone(), true)), + }, + Err(ref e) => Err((e.clone(), true)), + }; + builder.insert(*crate_id, expansion_res) + } } change.set_proc_macros(builder); @@ -645,7 +636,7 @@ impl GlobalState { Config::user_config_dir_path().as_deref(), ); - if (self.proc_macro_clients.is_empty() || !same_workspaces) + if (self.proc_macro_clients.len() < self.workspaces.len() || !same_workspaces) && self.config.expand_proc_macros() { info!("Spawning proc-macro servers"); |
