From 74d6826858bab734766048a670820d9961c70448 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Mon, 22 May 2023 21:19:54 +0200 Subject: [PATCH] expand: Change how `#![cfg(FALSE)]` behaves on crate root --- crates/hir-def/src/attr.rs | 1 + crates/hir-def/src/nameres/collector.rs | 10 +++++----- crates/hir-expand/src/attrs.rs | 8 ++++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/crates/hir-def/src/attr.rs b/crates/hir-def/src/attr.rs index de515b569df..bab3bbc2329 100644 --- a/crates/hir-def/src/attr.rs +++ b/crates/hir-def/src/attr.rs @@ -202,6 +202,7 @@ impl Attrs { None => Some(first), } } + pub(crate) fn is_cfg_enabled(&self, cfg_options: &CfgOptions) -> bool { match self.cfg() { None => true, diff --git a/crates/hir-def/src/nameres/collector.rs b/crates/hir-def/src/nameres/collector.rs index a47ee85da10..a528d238e37 100644 --- a/crates/hir-def/src/nameres/collector.rs +++ b/crates/hir-def/src/nameres/collector.rs @@ -290,16 +290,16 @@ impl DefCollector<'_> { let module_id = self.def_map.root; let attrs = item_tree.top_level_attrs(self.db, self.def_map.krate); - if let Some(cfg) = attrs.cfg() { - if self.cfg_options.check(&cfg) == Some(false) { - return; - } - } self.inject_prelude(&attrs); // Process other crate-level attributes. for attr in &*attrs { + if let Some(cfg) = attr.cfg() { + if self.cfg_options.check(&cfg) == Some(false) { + return; + } + } let attr_name = match attr.path.as_ident() { Some(name) => name, None => continue, diff --git a/crates/hir-expand/src/attrs.rs b/crates/hir-expand/src/attrs.rs index 3ff18e982e1..0c369a18bb9 100644 --- a/crates/hir-expand/src/attrs.rs +++ b/crates/hir-expand/src/attrs.rs @@ -309,6 +309,14 @@ impl Attr { Some(paths) } + + pub fn cfg(&self) -> Option { + if *self.path.as_ident()? == crate::name![cfg] { + self.token_tree_value().map(CfgExpr::parse) + } else { + None + } + } } pub fn collect_attrs(