mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00
feat: Add config to replace specific proc-macros with dummy expanders
This commit is contained in:
parent
68bc12c3b8
commit
aecf26d09b
6 changed files with 68 additions and 17 deletions
|
@ -88,7 +88,7 @@ fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
|
|||
}
|
||||
|
||||
fn to_crate_graph(project_workspace: ProjectWorkspace) -> CrateGraph {
|
||||
project_workspace.to_crate_graph(&mut |_| Vec::new(), &mut {
|
||||
project_workspace.to_crate_graph(&Default::default(), &mut |_, _| Vec::new(), &mut {
|
||||
let mut counter = 0;
|
||||
move |_path| {
|
||||
counter += 1;
|
||||
|
|
|
@ -387,10 +387,14 @@ impl ProjectWorkspace {
|
|||
|
||||
pub fn to_crate_graph(
|
||||
&self,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>,
|
||||
dummy_replace: &FxHashMap<Box<str>, Box<[Box<str>]>>,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath, &[Box<str>]) -> Vec<ProcMacro>,
|
||||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
) -> CrateGraph {
|
||||
let _p = profile::span("ProjectWorkspace::to_crate_graph");
|
||||
let load_proc_macro = &mut |crate_name: &_, path: &_| {
|
||||
load_proc_macro(path, dummy_replace.get(crate_name).map(|it| &**it).unwrap_or_default())
|
||||
};
|
||||
|
||||
let mut crate_graph = match self {
|
||||
ProjectWorkspace::Json { project, sysroot, rustc_cfg } => project_json_to_crate_graph(
|
||||
|
@ -432,7 +436,7 @@ impl ProjectWorkspace {
|
|||
|
||||
fn project_json_to_crate_graph(
|
||||
rustc_cfg: Vec<CfgFlag>,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
project: &ProjectJson,
|
||||
sysroot: &Option<Sysroot>,
|
||||
|
@ -452,7 +456,12 @@ fn project_json_to_crate_graph(
|
|||
})
|
||||
.map(|(crate_id, krate, file_id)| {
|
||||
let env = krate.env.clone().into_iter().collect();
|
||||
let proc_macro = krate.proc_macro_dylib_path.clone().map(|it| load_proc_macro(&it));
|
||||
let proc_macro = krate.proc_macro_dylib_path.clone().map(|it| {
|
||||
load_proc_macro(
|
||||
krate.display_name.as_ref().map(|it| it.canonical_name()).unwrap_or(""),
|
||||
&it,
|
||||
)
|
||||
});
|
||||
|
||||
let target_cfgs = match krate.target.as_deref() {
|
||||
Some(target) => {
|
||||
|
@ -513,7 +522,7 @@ fn project_json_to_crate_graph(
|
|||
fn cargo_to_crate_graph(
|
||||
rustc_cfg: Vec<CfgFlag>,
|
||||
override_cfg: &CfgOverrides,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
cargo: &CargoWorkspace,
|
||||
build_scripts: &WorkspaceBuildScripts,
|
||||
|
@ -571,7 +580,7 @@ fn cargo_to_crate_graph(
|
|||
&cargo[pkg],
|
||||
build_scripts.outputs.get(pkg),
|
||||
cfg_options,
|
||||
load_proc_macro,
|
||||
&mut |path| load_proc_macro(&cargo[tgt].name, path),
|
||||
file_id,
|
||||
&cargo[tgt].name,
|
||||
);
|
||||
|
@ -702,7 +711,7 @@ fn handle_rustc_crates(
|
|||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
crate_graph: &mut CrateGraph,
|
||||
cfg_options: &CfgOptions,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
pkg_to_lib_crate: &mut FxHashMap<la_arena::Idx<crate::PackageData>, CrateId>,
|
||||
public_deps: &SysrootPublicDeps,
|
||||
cargo: &CargoWorkspace,
|
||||
|
@ -738,7 +747,7 @@ fn handle_rustc_crates(
|
|||
&rustc_workspace[pkg],
|
||||
None,
|
||||
cfg_options,
|
||||
load_proc_macro,
|
||||
&mut |path| load_proc_macro(&rustc_workspace[tgt].name, path),
|
||||
file_id,
|
||||
&rustc_workspace[tgt].name,
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue