Skip to content

Commit 5abedd8

Browse files
committed
visit: unify extern & assoc item visiting
1 parent cf87edf commit 5abedd8

File tree

2 files changed

+40
-58
lines changed

2 files changed

+40
-58
lines changed

src/libsyntax/mut_visit.rs

+14-25
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,19 @@ pub fn noop_flat_map_assoc_item<T: MutVisitor>(
949949
) -> SmallVec<[P<AssocItem>; 1]> {
950950
let AssocItem { id, ident, vis, defaultness: _, attrs, kind, span, tokens: _ } =
951951
item.deref_mut();
952+
walk_nested_item(visitor, id, span, ident, vis, attrs, kind);
953+
smallvec![item]
954+
}
955+
956+
pub fn walk_nested_item(
957+
visitor: &mut impl MutVisitor,
958+
id: &mut NodeId,
959+
span: &mut Span,
960+
ident: &mut Ident,
961+
vis: &mut Visibility,
962+
attrs: &mut Vec<Attribute>,
963+
kind: &mut AssocItemKind,
964+
) {
952965
visitor.visit_id(id);
953966
visitor.visit_ident(ident);
954967
visitor.visit_vis(vis);
@@ -971,8 +984,6 @@ pub fn noop_flat_map_assoc_item<T: MutVisitor>(
971984
AssocItemKind::Macro(mac) => visitor.visit_mac(mac),
972985
}
973986
visitor.visit_span(span);
974-
975-
smallvec![item]
976987
}
977988

978989
pub fn noop_visit_fn_header<T: MutVisitor>(header: &mut FnHeader, vis: &mut T) {
@@ -1038,29 +1049,7 @@ pub fn noop_flat_map_foreign_item<T: MutVisitor>(
10381049
visitor: &mut T,
10391050
) -> SmallVec<[P<ForeignItem>; 1]> {
10401051
let ForeignItem { ident, attrs, id, kind, vis, span, tokens: _ } = item.deref_mut();
1041-
visitor.visit_ident(ident);
1042-
visit_attrs(attrs, visitor);
1043-
match kind {
1044-
ForeignItemKind::Fn(sig, generics, body) => {
1045-
visit_fn_sig(sig, visitor);
1046-
visitor.visit_generics(generics);
1047-
visit_opt(body, |body| visitor.visit_block(body));
1048-
}
1049-
ForeignItemKind::Const(ty, body) | ForeignItemKind::Static(ty, _, body) => {
1050-
visitor.visit_ty(ty);
1051-
visit_opt(body, |body| visitor.visit_expr(body));
1052-
}
1053-
ForeignItemKind::TyAlias(generics, bounds, ty) => {
1054-
visitor.visit_generics(generics);
1055-
visit_bounds(bounds, visitor);
1056-
visit_opt(ty, |ty| visitor.visit_ty(ty));
1057-
}
1058-
ForeignItemKind::Macro(mac) => visitor.visit_mac(mac),
1059-
}
1060-
visitor.visit_id(id);
1061-
visitor.visit_span(span);
1062-
visitor.visit_vis(vis);
1063-
1052+
walk_nested_item(visitor, id, span, ident, vis, attrs, kind);
10641053
smallvec![item]
10651054
}
10661055

src/libsyntax/visit.rs

+26-33
Original file line numberDiff line numberDiff line change
@@ -525,29 +525,8 @@ pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) {
525525
}
526526

527527
pub fn walk_foreign_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a ForeignItem) {
528-
visitor.visit_vis(&item.vis);
529-
visitor.visit_ident(item.ident);
530-
531-
match item.kind {
532-
ForeignItemKind::Fn(ref sig, ref generics, ref body) => {
533-
visitor.visit_generics(generics);
534-
let kind = FnKind::Fn(FnCtxt::Foreign, item.ident, sig, &item.vis, body.as_deref());
535-
visitor.visit_fn(kind, item.span, item.id);
536-
}
537-
ForeignItemKind::Const(ref typ, ref body)
538-
| ForeignItemKind::Static(ref typ, _, ref body) => {
539-
visitor.visit_ty(typ);
540-
walk_list!(visitor, visit_expr, body);
541-
}
542-
ForeignItemKind::TyAlias(ref generics, ref bounds, ref ty) => {
543-
visitor.visit_generics(generics);
544-
walk_list!(visitor, visit_param_bound, bounds);
545-
walk_list!(visitor, visit_ty, ty);
546-
}
547-
ForeignItemKind::Macro(ref mac) => visitor.visit_mac(mac),
548-
}
549-
550-
walk_list!(visitor, visit_attribute, &item.attrs);
528+
let ForeignItem { id, span, ident, vis, attrs, kind, tokens: _ } = item;
529+
walk_nested_item(visitor, *id, *span, *ident, vis, attrs, kind, FnCtxt::Foreign);
551530
}
552531

553532
pub fn walk_global_asm<'a, V: Visitor<'a>>(_: &mut V, _: &'a GlobalAsm) {
@@ -630,25 +609,39 @@ pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>, _span: Spa
630609
}
631610

632611
pub fn walk_assoc_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a AssocItem, ctxt: AssocCtxt) {
633-
visitor.visit_vis(&item.vis);
634-
visitor.visit_ident(item.ident);
635-
walk_list!(visitor, visit_attribute, &item.attrs);
636-
match item.kind {
637-
AssocItemKind::Const(ref ty, ref expr) | AssocItemKind::Static(ref ty, _, ref expr) => {
612+
let AssocItem { id, span, ident, vis, attrs, kind, tokens: _, defaultness: _ } = item;
613+
walk_nested_item(visitor, *id, *span, *ident, vis, attrs, kind, FnCtxt::Assoc(ctxt));
614+
}
615+
616+
fn walk_nested_item<'a, V: Visitor<'a>>(
617+
visitor: &mut V,
618+
id: NodeId,
619+
span: Span,
620+
ident: Ident,
621+
vis: &'a Visibility,
622+
attrs: &'a [Attribute],
623+
kind: &'a AssocItemKind,
624+
ctxt: FnCtxt,
625+
) {
626+
visitor.visit_vis(vis);
627+
visitor.visit_ident(ident);
628+
walk_list!(visitor, visit_attribute, attrs);
629+
match kind {
630+
AssocItemKind::Const(ty, expr) | AssocItemKind::Static(ty, _, expr) => {
638631
visitor.visit_ty(ty);
639632
walk_list!(visitor, visit_expr, expr);
640633
}
641-
AssocItemKind::Fn(ref sig, ref generics, ref body) => {
634+
AssocItemKind::Fn(sig, generics, body) => {
642635
visitor.visit_generics(generics);
643-
let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), item.ident, sig, &item.vis, body.as_deref());
644-
visitor.visit_fn(kind, item.span, item.id);
636+
let kind = FnKind::Fn(ctxt, ident, sig, vis, body.as_deref());
637+
visitor.visit_fn(kind, span, id);
645638
}
646-
AssocItemKind::TyAlias(ref generics, ref bounds, ref ty) => {
639+
AssocItemKind::TyAlias(generics, bounds, ty) => {
647640
visitor.visit_generics(generics);
648641
walk_list!(visitor, visit_param_bound, bounds);
649642
walk_list!(visitor, visit_ty, ty);
650643
}
651-
AssocItemKind::Macro(ref mac) => {
644+
AssocItemKind::Macro(mac) => {
652645
visitor.visit_mac(mac);
653646
}
654647
}

0 commit comments

Comments
 (0)