Skip to content

Commit 8a7262c

Browse files
committed
deduplicate more walk_* methods in AST visit
1 parent 91b77e0 commit 8a7262c

File tree

5 files changed

+188
-257
lines changed

5 files changed

+188
-257
lines changed

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 15 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ pub trait MutVisitor: Sized {
208208
}
209209

210210
fn visit_ident(&mut self, i: &mut Ident) {
211-
walk_ident(self, i);
211+
self.visit_span(&mut i.span);
212212
}
213213

214214
fn visit_path(&mut self, p: &mut Path) {
@@ -364,13 +364,16 @@ pub trait MutVisitor: Sized {
364364
super::common_visitor_and_walkers!((mut) MutVisitor);
365365

366366
macro_rules! generate_flat_map_visitor_fns {
367-
($($name:ident, $Ty:ty, $flat_map_fn:ident;)+) => {
367+
($($name:ident, $Ty:ty, $flat_map_fn:ident$(, $param:ident: $ParamTy:ty)*;)+) => {
368368
$(
369369
fn $name<V: MutVisitor>(
370370
vis: &mut V,
371371
values: &mut ThinVec<$Ty>,
372+
$(
373+
$param: $ParamTy,
374+
)*
372375
) {
373-
values.flat_map_in_place(|value| vis.$flat_map_fn(value));
376+
values.flat_map_in_place(|value| vis.$flat_map_fn(value$(,$param)*));
374377
}
375378
)+
376379
}
@@ -383,6 +386,8 @@ generate_flat_map_visitor_fns! {
383386
visit_stmts, Stmt, flat_map_stmt;
384387
visit_exprs, P<Expr>, filter_map_expr;
385388
visit_pat_fields, PatField, flat_map_pat_field;
389+
visit_variants, Variant, flat_map_variant;
390+
visit_assoc_items, P<AssocItem>, flat_map_assoc_item, ctxt: AssocCtxt;
386391
}
387392

388393
#[inline]
@@ -439,15 +444,6 @@ fn visit_delim_args<T: MutVisitor>(vis: &mut T, args: &mut DelimArgs) {
439444
vis.visit_span(close);
440445
}
441446

442-
pub fn walk_pat_field<T: MutVisitor>(vis: &mut T, fp: &mut PatField) {
443-
let PatField { attrs, id, ident, is_placeholder: _, is_shorthand: _, pat, span } = fp;
444-
vis.visit_id(id);
445-
visit_attrs(vis, attrs);
446-
vis.visit_ident(ident);
447-
vis.visit_pat(pat);
448-
vis.visit_span(span);
449-
}
450-
451447
pub fn walk_flat_map_pat_field<T: MutVisitor>(
452448
vis: &mut T,
453449
mut fp: PatField,
@@ -456,21 +452,13 @@ pub fn walk_flat_map_pat_field<T: MutVisitor>(
456452
smallvec![fp]
457453
}
458454

459-
fn walk_use_tree<T: MutVisitor>(vis: &mut T, use_tree: &mut UseTree) {
460-
let UseTree { prefix, kind, span } = use_tree;
461-
vis.visit_path(prefix);
462-
match kind {
463-
UseTreeKind::Simple(rename) => visit_opt(rename, |rename| vis.visit_ident(rename)),
464-
UseTreeKind::Nested { items, span } => {
465-
for (tree, id) in items {
466-
vis.visit_id(id);
467-
vis.visit_use_tree(tree);
468-
}
469-
vis.visit_span(span);
470-
}
471-
UseTreeKind::Glob => {}
472-
}
473-
vis.visit_span(span);
455+
fn visit_nested_use_tree<V: MutVisitor>(
456+
vis: &mut V,
457+
nested_tree: &mut UseTree,
458+
nested_id: &mut NodeId,
459+
) {
460+
vis.visit_id(nested_id);
461+
vis.visit_use_tree(nested_tree);
474462
}
475463

476464
pub fn walk_arm<T: MutVisitor>(vis: &mut T, arm: &mut Arm) {
@@ -507,31 +495,6 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
507495
vis.visit_span(span);
508496
}
509497

510-
pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut TyPat) {
511-
let TyPat { id, kind, span, tokens: _ } = ty;
512-
vis.visit_id(id);
513-
match kind {
514-
TyPatKind::Range(start, end, _include_end) => {
515-
visit_opt(start, |c| vis.visit_anon_const(c));
516-
visit_opt(end, |c| vis.visit_anon_const(c));
517-
}
518-
TyPatKind::Or(variants) => visit_thin_vec(variants, |p| vis.visit_ty_pat(p)),
519-
TyPatKind::Err(_) => {}
520-
}
521-
vis.visit_span(span);
522-
}
523-
524-
pub fn walk_variant<T: MutVisitor>(visitor: &mut T, variant: &mut Variant) {
525-
let Variant { ident, vis, attrs, id, data, disr_expr, span, is_placeholder: _ } = variant;
526-
visitor.visit_id(id);
527-
visit_attrs(visitor, attrs);
528-
visitor.visit_vis(vis);
529-
visitor.visit_ident(ident);
530-
visitor.visit_variant_data(data);
531-
visit_opt(disr_expr, |disr_expr| visitor.visit_anon_const(disr_expr));
532-
visitor.visit_span(span);
533-
}
534-
535498
pub fn walk_flat_map_variant<T: MutVisitor>(
536499
vis: &mut T,
537500
mut variant: Variant,
@@ -540,25 +503,6 @@ pub fn walk_flat_map_variant<T: MutVisitor>(
540503
smallvec![variant]
541504
}
542505

543-
fn walk_ident<T: MutVisitor>(vis: &mut T, Ident { name: _, span }: &mut Ident) {
544-
vis.visit_span(span);
545-
}
546-
547-
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens: _ }: &mut Path) {
548-
for segment in segments {
549-
vis.visit_path_segment(segment);
550-
}
551-
vis.visit_span(span);
552-
}
553-
554-
fn walk_qself<T: MutVisitor>(vis: &mut T, qself: &mut Option<P<QSelf>>) {
555-
visit_opt(qself, |qself| {
556-
let QSelf { ty, path_span, position: _ } = &mut **qself;
557-
vis.visit_ty(ty);
558-
vis.visit_span(path_span);
559-
})
560-
}
561-
562506
fn walk_generic_args<T: MutVisitor>(vis: &mut T, generic_args: &mut GenericArgs) {
563507
match generic_args {
564508
GenericArgs::AngleBracketed(data) => vis.visit_angle_bracketed_parameter_data(data),
@@ -841,11 +785,6 @@ fn walk_variant_data<T: MutVisitor>(vis: &mut T, vdata: &mut VariantData) {
841785
}
842786
}
843787

844-
fn walk_trait_ref<T: MutVisitor>(vis: &mut T, TraitRef { path, ref_id }: &mut TraitRef) {
845-
vis.visit_id(ref_id);
846-
vis.visit_path(path);
847-
}
848-
849788
pub fn walk_field_def<T: MutVisitor>(visitor: &mut T, fd: &mut FieldDef) {
850789
let FieldDef { span, ident, vis, id, ty, attrs, is_placeholder: _, safety, default } = fd;
851790
visitor.visit_id(id);
@@ -866,15 +805,6 @@ pub fn walk_flat_map_field_def<T: MutVisitor>(
866805
smallvec![fd]
867806
}
868807

869-
pub fn walk_expr_field<T: MutVisitor>(vis: &mut T, f: &mut ExprField) {
870-
let ExprField { ident, expr, span, is_shorthand: _, attrs, id, is_placeholder: _ } = f;
871-
vis.visit_id(id);
872-
visit_attrs(vis, attrs);
873-
vis.visit_ident(ident);
874-
vis.visit_expr(expr);
875-
vis.visit_span(span);
876-
}
877-
878808
pub fn walk_flat_map_expr_field<T: MutVisitor>(
879809
vis: &mut T,
880810
mut f: ExprField,

0 commit comments

Comments
 (0)