Skip to content

Commit cfda402

Browse files
committed
Unify {visit,walk}_use_tree
1 parent 924326f commit cfda402

File tree

1 file changed

+33
-42
lines changed

1 file changed

+33
-42
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ macro_rules! make_ast_visitor {
207207
make_visit!{MetaItemInner; visit_meta_list_item, walk_meta_list_item}
208208
make_visit!{Path; visit_path, walk_path}
209209
make_visit!{PreciseCapturingArg; visit_precise_capturing_arg, walk_precise_capturing_arg}
210-
make_visit!{UseTree; visit_use_tree, walk_use_tree}
211210

212211
fn flat_map_foreign_item(&mut self, ni: P<ForeignItem>) -> SmallVec<[P<ForeignItem>; 1]> {
213212
walk_flat_map_item(self, ni)
@@ -290,7 +289,6 @@ macro_rules! make_ast_visitor {
290289
make_visit!{Item; visit_item, walk_item}
291290
make_visit!{Path, _ id: NodeId; visit_path, walk_path}
292291
make_visit!{Stmt; visit_stmt, walk_stmt}
293-
make_visit!{UseTree, id: NodeId, _ nested: bool; visit_use_tree, walk_use_tree}
294292

295293
/// This method is a hack to workaround unstable of `stmt_expr_attributes`.
296294
/// It can be removed once that feature is stabilized.
@@ -347,6 +345,7 @@ macro_rules! make_ast_visitor {
347345
make_visit!{PathSegment; visit_path_segment, walk_path_segment}
348346
make_visit!{PolyTraitRef; visit_poly_trait_ref, walk_poly_trait_ref}
349347
make_visit!{TraitRef; visit_trait_ref, walk_trait_ref}
348+
make_visit!{UseTree, id: NodeId, _ nested: bool; visit_use_tree, walk_use_tree}
350349
make_visit!{Variant; visit_variant, walk_variant}
351350
make_visit!{VariantData; visit_variant_data, walk_variant_data}
352351
make_visit!{Visibility; visit_vis, walk_vis}
@@ -715,6 +714,37 @@ macro_rules! make_ast_visitor {
715714
return_result!(V)
716715
}
717716

717+
pub fn walk_use_tree<$($lt,)? V: $trait$(<$lt>)?>(
718+
vis: &mut V,
719+
use_tree: ref_t!(UseTree),
720+
id: NodeId,
721+
) -> result!(V) {
722+
let UseTree { prefix, kind, span } = use_tree;
723+
// TODO: Remove this after unifying visit_path
724+
try_v!(macro_if!{$($mut)? {{
725+
let _ = id;
726+
vis.visit_path(prefix)
727+
}} else {
728+
vis.visit_path(prefix, id)
729+
}});
730+
match kind {
731+
UseTreeKind::Simple(rename) => {
732+
// The extra IDs are handled during AST lowering.
733+
visit_o!(rename, |rename: ref_t!(Ident)| vis.visit_ident(rename));
734+
}
735+
UseTreeKind::Nested { items, span } => {
736+
for (tree, id) in items {
737+
try_v!(visit_id!(vis, id));
738+
vis.visit_use_tree(tree, *id, true);
739+
}
740+
try_v!(visit_span!(vis, span));
741+
}
742+
UseTreeKind::Glob => {}
743+
}
744+
try_v!(visit_span!(vis, span));
745+
return_result!(V)
746+
}
747+
718748
pub fn walk_variant<$($lt,)? V: $trait$(<$lt>)?>(
719749
visitor: &mut V,
720750
variant: ref_t!(Variant)
@@ -1096,28 +1126,6 @@ pub mod visit {
10961126
V::Result::output()
10971127
}
10981128

1099-
pub fn walk_use_tree<'a, V: Visitor<'a>>(
1100-
visitor: &mut V,
1101-
use_tree: &'a UseTree,
1102-
id: NodeId,
1103-
) -> V::Result {
1104-
let UseTree { prefix, kind, span: _ } = use_tree;
1105-
try_visit!(visitor.visit_path(prefix, id));
1106-
match kind {
1107-
UseTreeKind::Simple(rename) => {
1108-
// The extra IDs are handled during AST lowering.
1109-
visit_opt!(visitor, visit_ident, rename);
1110-
}
1111-
UseTreeKind::Glob => {}
1112-
UseTreeKind::Nested { ref items, span: _ } => {
1113-
for &(ref nested_tree, nested_id) in items {
1114-
try_visit!(visitor.visit_use_tree(nested_tree, nested_id, true));
1115-
}
1116-
}
1117-
}
1118-
V::Result::output()
1119-
}
1120-
11211129
pub fn walk_generic_arg<'a, V>(visitor: &mut V, generic_arg: &'a GenericArg) -> V::Result
11221130
where
11231131
V: Visitor<'a>,
@@ -1743,23 +1751,6 @@ pub mod mut_visit {
17431751
smallvec![fp]
17441752
}
17451753

1746-
fn walk_use_tree<T: MutVisitor>(vis: &mut T, use_tree: &mut UseTree) {
1747-
let UseTree { prefix, kind, span } = use_tree;
1748-
vis.visit_path(prefix);
1749-
match kind {
1750-
UseTreeKind::Simple(rename) => visit_opt(rename, |rename| vis.visit_ident(rename)),
1751-
UseTreeKind::Nested { items, span } => {
1752-
for (tree, id) in items {
1753-
vis.visit_id(id);
1754-
vis.visit_use_tree(tree);
1755-
}
1756-
vis.visit_span(span);
1757-
}
1758-
UseTreeKind::Glob => {}
1759-
}
1760-
vis.visit_span(span);
1761-
}
1762-
17631754
pub fn walk_flat_map_arm<T: MutVisitor>(vis: &mut T, mut arm: Arm) -> SmallVec<[Arm; 1]> {
17641755
vis.visit_arm(&mut arm);
17651756
smallvec![arm]
@@ -2234,7 +2225,7 @@ pub mod mut_visit {
22342225
fn walk(&mut self, span: Span, id: NodeId, vis: &mut impl MutVisitor) {
22352226
match self {
22362227
ItemKind::ExternCrate(_orig_name) => {}
2237-
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree),
2228+
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree, id, false),
22382229
ItemKind::Static(box StaticItem { ty, safety: _, mutability: _, expr }) => {
22392230
vis.visit_ty(ty);
22402231
visit_opt(expr, |expr| vis.visit_expr(expr));

0 commit comments

Comments
 (0)