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::>() .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, crate_graph: &mut CrateGraph, cfg_options: &CfgOptions, + override_cfg: &CfgOverrides, load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec, pkg_to_lib_crate: &mut FxHashMap, 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);