about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2024-12-31 22:59:22 +0000
committerEsteban Küber <esteban@kuber.com.ar>2025-08-01 22:02:52 +0000
commit4ba4559a9d6974f5789f7e1654d5063941bb8816 (patch)
treea9444926e5963af4a170398df5abec80de1ab7c3
parent5210c501bc7320d7cc5e84f77d2c7ca5fca9a2e0 (diff)
downloadrust-4ba4559a9d6974f5789f7e1654d5063941bb8816.tar.gz
rust-4ba4559a9d6974f5789f7e1654d5063941bb8816.zip
remove recursive search for items
-rw-r--r--compiler/rustc_expand/src/expand.rs48
-rw-r--r--tests/ui/cfg/diagnostics-reexport.rs4
-rw-r--r--tests/ui/cfg/diagnostics-reexport.stderr10
3 files changed, 17 insertions, 45 deletions
diff --git a/compiler/rustc_expand/src/expand.rs b/compiler/rustc_expand/src/expand.rs
index bae39a65cd9..609e93a685c 100644
--- a/compiler/rustc_expand/src/expand.rs
+++ b/compiler/rustc_expand/src/expand.rs
@@ -1399,44 +1399,26 @@ impl InvocationCollectorNode for P<ast::Item> {
     }
 
     fn declared_idents(&self) -> Vec<Ident> {
-        struct ItemNameVisitor(Vec<Ident>, u8);
-        impl Visitor<'_> for ItemNameVisitor {
-            fn visit_item(&mut self, i: &ast::Item) {
-                self.1 += 1;
-                if let ItemKind::Use(ut) = &i.kind {
-                    fn collect_use_tree_leaves(ut: &ast::UseTree, idents: &mut Vec<Ident>) {
-                        match &ut.kind {
-                            ast::UseTreeKind::Glob => {}
-                            ast::UseTreeKind::Simple(_) => idents.push(ut.ident()),
-                            ast::UseTreeKind::Nested { items, .. } => {
-                                for (ut, _) in items {
-                                    collect_use_tree_leaves(ut, idents);
-                                }
-                            }
+        if let ItemKind::Use(ut) = &self.kind {
+            fn collect_use_tree_leaves(ut: &ast::UseTree, idents: &mut Vec<Ident>) {
+                match &ut.kind {
+                    ast::UseTreeKind::Glob => {}
+                    ast::UseTreeKind::Simple(_) => idents.push(ut.ident()),
+                    ast::UseTreeKind::Nested { items, .. } => {
+                        for (ut, _) in items {
+                            collect_use_tree_leaves(ut, idents);
                         }
                     }
-
-                    collect_use_tree_leaves(ut, &mut self.0);
-                } else {
-                    if let Some(ident) = i.kind.ident() {
-                        self.0.push(ident);
-                    }
-                }
-                if self.1 < 4 {
-                    // We only visit up to 3 levels of nesting from this item, like if we were
-                    // looking at `mod a`, we'd find item `a::b::c`. We have this limit to guard
-                    // against deeply nested modules behind `cfg` flags, where we could spend
-                    // significant time collecting this information purely for a potential
-                    // diagnostic improvement.
-                    visit::walk_item(self, i);
                 }
-                self.1 -= 1;
             }
+            let mut idents = vec![];
+            collect_use_tree_leaves(&ut, &mut idents);
+            idents
+        } else if let Some(ident) = self.kind.ident() {
+            vec![ident]
+        } else {
+            vec![]
         }
-
-        let mut v = ItemNameVisitor(vec![], 0);
-        v.visit_item(self);
-        v.0
     }
 }
 
diff --git a/tests/ui/cfg/diagnostics-reexport.rs b/tests/ui/cfg/diagnostics-reexport.rs
index bdb57df2f25..c6a714fca71 100644
--- a/tests/ui/cfg/diagnostics-reexport.rs
+++ b/tests/ui/cfg/diagnostics-reexport.rs
@@ -1,7 +1,7 @@
 pub mod inner {
-    #[cfg(false)] //~ NOTE the item is gated here
+    #[cfg(false)]
     mod gone {
-        pub fn uwu() {} //~ NOTE found an item that was configured out
+        pub fn uwu() {}
     }
 
     #[cfg(false)] //~ NOTE the item is gated here
diff --git a/tests/ui/cfg/diagnostics-reexport.stderr b/tests/ui/cfg/diagnostics-reexport.stderr
index 82412ed49c5..bf1bbcba7e4 100644
--- a/tests/ui/cfg/diagnostics-reexport.stderr
+++ b/tests/ui/cfg/diagnostics-reexport.stderr
@@ -51,16 +51,6 @@ LL |     inner::uwu();
    |            ^^^ not found in `inner`
    |
 note: found an item that was configured out
-  --> $DIR/diagnostics-reexport.rs:4:16
-   |
-LL |         pub fn uwu() {}
-   |                ^^^
-note: the item is gated here
-  --> $DIR/diagnostics-reexport.rs:2:11
-   |
-LL |     #[cfg(false)]
-   |           ^^^^^
-note: found an item that was configured out
   --> $DIR/diagnostics-reexport.rs:8:20
    |
 LL |     pub use super::uwu;