diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2024-12-31 22:59:22 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2025-08-01 22:02:52 +0000 |
| commit | 4ba4559a9d6974f5789f7e1654d5063941bb8816 (patch) | |
| tree | a9444926e5963af4a170398df5abec80de1ab7c3 | |
| parent | 5210c501bc7320d7cc5e84f77d2c7ca5fca9a2e0 (diff) | |
| download | rust-4ba4559a9d6974f5789f7e1654d5063941bb8816.tar.gz rust-4ba4559a9d6974f5789f7e1654d5063941bb8816.zip | |
remove recursive search for items
| -rw-r--r-- | compiler/rustc_expand/src/expand.rs | 48 | ||||
| -rw-r--r-- | tests/ui/cfg/diagnostics-reexport.rs | 4 | ||||
| -rw-r--r-- | tests/ui/cfg/diagnostics-reexport.stderr | 10 |
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; |
