Unnamed repository; edit this file 'description' to name the repository.
fix: Unset test feature in rustc source crates
Lukas Wirth 2022-04-12
parent b90df79 · commit 24af94b
-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);