mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-26 11:59:49 +00:00
Show proc-macro loading errors in unresolved-proc-macro diagnostics
This commit is contained in:
parent
15c63c4119
commit
7d51fc4640
14 changed files with 149 additions and 114 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(&mut |_, _| Ok(Vec::new()), &mut {
|
||||
let mut counter = 0;
|
||||
move |_path| {
|
||||
counter += 1;
|
||||
|
|
|
@ -7,7 +7,7 @@ use std::{collections::VecDeque, fmt, fs, process::Command};
|
|||
use anyhow::{format_err, Context, Result};
|
||||
use base_db::{
|
||||
CrateDisplayName, CrateGraph, CrateId, CrateName, CrateOrigin, Dependency, Edition, Env,
|
||||
FileId, LangCrateOrigin, ProcMacro,
|
||||
FileId, LangCrateOrigin, ProcMacroLoadResult,
|
||||
};
|
||||
use cfg::{CfgDiff, CfgOptions};
|
||||
use paths::{AbsPath, AbsPathBuf};
|
||||
|
@ -389,7 +389,7 @@ impl ProjectWorkspace {
|
|||
|
||||
pub fn to_crate_graph(
|
||||
&self,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> ProcMacroLoadResult,
|
||||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
) -> CrateGraph {
|
||||
let _p = profile::span("ProjectWorkspace::to_crate_graph");
|
||||
|
@ -434,7 +434,7 @@ impl ProjectWorkspace {
|
|||
|
||||
fn project_json_to_crate_graph(
|
||||
rustc_cfg: Vec<CfgFlag>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> ProcMacroLoadResult,
|
||||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
project: &ProjectJson,
|
||||
sysroot: &Option<Sysroot>,
|
||||
|
@ -454,12 +454,13 @@ 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(
|
||||
let proc_macro = match krate.proc_macro_dylib_path.clone() {
|
||||
Some(it) => load_proc_macro(
|
||||
krate.display_name.as_ref().map(|it| it.canonical_name()).unwrap_or(""),
|
||||
&it,
|
||||
)
|
||||
});
|
||||
),
|
||||
None => Ok(Vec::new()),
|
||||
};
|
||||
|
||||
let target_cfgs = match krate.target.as_deref() {
|
||||
Some(target) => {
|
||||
|
@ -480,7 +481,7 @@ fn project_json_to_crate_graph(
|
|||
cfg_options.clone(),
|
||||
cfg_options,
|
||||
env,
|
||||
proc_macro.unwrap_or_default(),
|
||||
proc_macro,
|
||||
krate.is_proc_macro,
|
||||
if krate.display_name.is_some() {
|
||||
CrateOrigin::CratesIo { repo: krate.repository.clone() }
|
||||
|
@ -521,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(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> ProcMacroLoadResult,
|
||||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
cargo: &CargoWorkspace,
|
||||
build_scripts: &WorkspaceBuildScripts,
|
||||
|
@ -708,7 +709,7 @@ fn detached_files_to_crate_graph(
|
|||
cfg_options.clone(),
|
||||
cfg_options.clone(),
|
||||
Env::default(),
|
||||
Vec::new(),
|
||||
Ok(Vec::new()),
|
||||
false,
|
||||
CrateOrigin::CratesIo { repo: None },
|
||||
);
|
||||
|
@ -724,7 +725,7 @@ fn handle_rustc_crates(
|
|||
crate_graph: &mut CrateGraph,
|
||||
cfg_options: &CfgOptions,
|
||||
override_cfg: &CfgOverrides,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> ProcMacroLoadResult,
|
||||
pkg_to_lib_crate: &mut FxHashMap<la_arena::Idx<crate::PackageData>, CrateId>,
|
||||
public_deps: &SysrootPublicDeps,
|
||||
cargo: &CargoWorkspace,
|
||||
|
@ -840,7 +841,7 @@ fn add_target_crate_root(
|
|||
pkg: &PackageData,
|
||||
build_data: Option<&BuildScriptOutput>,
|
||||
cfg_options: &CfgOptions,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>,
|
||||
load_proc_macro: &mut dyn FnMut(&AbsPath) -> ProcMacroLoadResult,
|
||||
file_id: FileId,
|
||||
cargo_name: &str,
|
||||
is_proc_macro: bool,
|
||||
|
@ -866,11 +867,10 @@ fn add_target_crate_root(
|
|||
}
|
||||
}
|
||||
|
||||
let proc_macro = build_data
|
||||
.as_ref()
|
||||
.and_then(|it| it.proc_macro_dylib_path.as_ref())
|
||||
.map(|it| load_proc_macro(it))
|
||||
.unwrap_or_default();
|
||||
let proc_macro = match build_data.as_ref().and_then(|it| it.proc_macro_dylib_path.as_ref()) {
|
||||
Some(it) => load_proc_macro(it),
|
||||
None => Ok(Vec::new()),
|
||||
};
|
||||
|
||||
let display_name = CrateDisplayName::from_canonical_name(cargo_name.to_string());
|
||||
let mut potential_cfg_options = cfg_options.clone();
|
||||
|
@ -922,7 +922,6 @@ fn sysroot_to_crate_graph(
|
|||
let file_id = load(&sysroot[krate].root)?;
|
||||
|
||||
let env = Env::default();
|
||||
let proc_macro = vec![];
|
||||
let display_name = CrateDisplayName::from_canonical_name(sysroot[krate].name.clone());
|
||||
let crate_id = crate_graph.add_crate_root(
|
||||
file_id,
|
||||
|
@ -932,7 +931,7 @@ fn sysroot_to_crate_graph(
|
|||
cfg_options.clone(),
|
||||
cfg_options.clone(),
|
||||
env,
|
||||
proc_macro,
|
||||
Ok(Vec::new()),
|
||||
false,
|
||||
CrateOrigin::Lang(LangCrateOrigin::from(&*sysroot[krate].name)),
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue