mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-29 06:23:25 +00:00
Merge #11964
11964: internal: Show more project building errors to the user r=Veykril a=Veykril Something very fishy is going on with the `rustc_workspace` handling, which caused this bug to only manifest in the `std` library but not other library crate... So there is either a bug there or just the fact that we seem to add duplicate dependencies (I think this is what we are doing with this right?) might be tripping something up somewhere. cc https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer/topic/Rust-analyzer.20use.20inside.20stdlib bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
commit
faaec86ff0
3 changed files with 26 additions and 2 deletions
|
@ -263,7 +263,7 @@ fn parse_macro_expansion(
|
|||
.collect::<Vec<_>>()
|
||||
.join("\n");
|
||||
|
||||
tracing::warn!(
|
||||
tracing::debug!(
|
||||
"fail on macro_parse: (reason: {:?} macro_call: {:#}) parents: {}",
|
||||
err,
|
||||
node.value,
|
||||
|
|
|
@ -663,6 +663,7 @@ fn cargo_to_crate_graph(
|
|||
load,
|
||||
&mut crate_graph,
|
||||
&cfg_options,
|
||||
override_cfg,
|
||||
load_proc_macro,
|
||||
&mut pkg_to_lib_crate,
|
||||
&public_deps,
|
||||
|
@ -723,6 +724,7 @@ fn handle_rustc_crates(
|
|||
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
|
||||
crate_graph: &mut CrateGraph,
|
||||
cfg_options: &CfgOptions,
|
||||
override_cfg: &CfgOverrides,
|
||||
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,
|
||||
|
@ -749,6 +751,28 @@ fn handle_rustc_crates(
|
|||
for dep in &rustc_workspace[pkg].dependencies {
|
||||
queue.push_back(dep.pkg);
|
||||
}
|
||||
|
||||
let mut cfg_options = cfg_options;
|
||||
let mut replaced_cfg_options;
|
||||
|
||||
let overrides = match override_cfg {
|
||||
CfgOverrides::Wildcard(cfg_diff) => Some(cfg_diff),
|
||||
CfgOverrides::Selective(cfg_overrides) => cfg_overrides.get(&cargo[pkg].name),
|
||||
};
|
||||
|
||||
if let Some(overrides) = overrides {
|
||||
// FIXME: this is sort of a hack to deal with #![cfg(not(test))] vanishing such as seen
|
||||
// in ed25519_dalek (#7243), and libcore (#9203) (although you only hit that one while
|
||||
// working on rust-lang/rust as that's the only time it appears outside sysroot).
|
||||
//
|
||||
// A more ideal solution might be to reanalyze crates based on where the cursor is and
|
||||
// figure out the set of cfgs that would have to apply to make it active.
|
||||
|
||||
replaced_cfg_options = cfg_options.clone();
|
||||
replaced_cfg_options.apply_diff(overrides.clone());
|
||||
cfg_options = &replaced_cfg_options;
|
||||
};
|
||||
|
||||
for &tgt in rustc_workspace[pkg].targets.iter() {
|
||||
if rustc_workspace[tgt].kind != TargetKind::Lib {
|
||||
continue;
|
||||
|
|
|
@ -190,7 +190,7 @@ impl GlobalState {
|
|||
// NOTE: don't count blocking select! call as a loop-turn time
|
||||
let _p = profile::span("GlobalState::handle_event");
|
||||
|
||||
tracing::info!("handle_event({:?})", event);
|
||||
tracing::debug!("handle_event({:?})", event);
|
||||
let task_queue_len = self.task_pool.handle.len();
|
||||
if task_queue_len > 0 {
|
||||
tracing::info!("task queue len: {}", task_queue_len);
|
||||
|
|
Loading…
Reference in a new issue