Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #14874 - Veykril:crate-cfg, r=Veykril
expand: Change how `#![cfg(FALSE)]` behaves on crate root Closes https://github.com/rust-lang/rust-analyzer/issues/14769
bors 2023-05-24
parent 8ad70e7 · parent 74d6826 · commit 2f840c2
-rw-r--r--crates/hir-def/src/attr.rs1
-rw-r--r--crates/hir-def/src/nameres/collector.rs10
-rw-r--r--crates/hir-expand/src/attrs.rs8
3 files changed, 14 insertions, 5 deletions
diff --git a/crates/hir-def/src/attr.rs b/crates/hir-def/src/attr.rs
index de515b569d..bab3bbc232 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 a47ee85da1..a528d238e3 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 3ff18e982e..0c369a18bb 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<CfgExpr> {
+ if *self.path.as_ident()? == crate::name![cfg] {
+ self.token_tree_value().map(CfgExpr::parse)
+ } else {
+ None
+ }
+ }
}
pub fn collect_attrs(