about summary refs log tree commit diff
path: root/compiler/rustc_expand/src/expand.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_expand/src/expand.rs')
-rw-r--r--compiler/rustc_expand/src/expand.rs38
1 files changed, 24 insertions, 14 deletions
diff --git a/compiler/rustc_expand/src/expand.rs b/compiler/rustc_expand/src/expand.rs
index 0517fd0419d..6174984e3be 100644
--- a/compiler/rustc_expand/src/expand.rs
+++ b/compiler/rustc_expand/src/expand.rs
@@ -1399,25 +1399,35 @@ impl InvocationCollectorNode for P<ast::Item> {
     }
 
     fn declared_idents(&self) -> Vec<Ident> {
-        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);
+        struct ItemNameVisitor(Vec<Ident>);
+        impl Visitor<'_> for ItemNameVisitor {
+            fn visit_item(&mut self, i: &ast::Item) {
+                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);
+                                }
+                            }
                         }
                     }
+
+                    collect_use_tree_leaves(ut, &mut self.0);
+                } else {
+                    if let Some(ident) = i.kind.ident() {
+                        self.0.push(ident);
+                    }
                 }
+                visit::walk_item(self, i);
             }
-
-            let mut idents = Vec::new();
-            collect_use_tree_leaves(ut, &mut idents);
-            idents
-        } else {
-            self.kind.ident().into_iter().collect()
         }
+
+        let mut v = ItemNameVisitor(vec![]);
+        v.visit_item(self);
+        v.0
     }
 }