Unnamed repository; edit this file 'description' to name the repository.
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 <[email protected]>
bors[bot] 2022-04-12
parent 5d25d24 · parent 24af94b · commit faaec86
-rw-r--r--crates/hir_expand/src/db.rs2
-rw-r--r--crates/project_model/src/workspace.rs24
-rw-r--r--crates/rust-analyzer/src/main_loop.rs2
3 files changed, 26 insertions, 2 deletions
diff --git a/crates/hir_expand/src/db.rs b/crates/hir_expand/src/db.rs
index e14c669b4c..8c08fdcd2e 100644
--- a/crates/hir_expand/src/db.rs
+++ b/crates/hir_expand/src/db.rs
@@ -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,
diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs
index e33ae60862..3ceb046939 100644
--- a/crates/project_model/src/workspace.rs
+++ b/crates/project_model/src/workspace.rs
@@ -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;
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index 2f0e5c64b9..e305212165 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -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);