@@ -208,11 +208,7 @@ pub trait MutVisitor: Sized {
208208 }
209209
210210 fn visit_ident ( & mut self , i : & mut Ident ) {
211- walk_ident ( self , i) ;
212- }
213-
214- fn visit_modifiers ( & mut self , m : & mut TraitBoundModifiers ) {
215- walk_modifiers ( self , m) ;
211+ self . visit_span ( & mut i. span ) ;
216212 }
217213
218214 fn visit_path ( & mut self , p : & mut Path ) {
@@ -367,6 +363,33 @@ pub trait MutVisitor: Sized {
367363
368364super :: common_visitor_and_walkers!( ( mut ) MutVisitor ) ;
369365
366+ macro_rules! generate_flat_map_visitor_fns {
367+ ( $( $name: ident, $Ty: ty, $flat_map_fn: ident$( , $param: ident: $ParamTy: ty) * ; ) +) => {
368+ $(
369+ fn $name<V : MutVisitor >(
370+ vis: & mut V ,
371+ values: & mut ThinVec <$Ty>,
372+ $(
373+ $param: $ParamTy,
374+ ) *
375+ ) {
376+ values. flat_map_in_place( |value| vis. $flat_map_fn( value$( , $param) * ) ) ;
377+ }
378+ ) +
379+ }
380+ }
381+
382+ generate_flat_map_visitor_fns ! {
383+ visit_items, P <Item >, flat_map_item;
384+ visit_foreign_items, P <ForeignItem >, flat_map_foreign_item;
385+ visit_generic_params, GenericParam , flat_map_generic_param;
386+ visit_stmts, Stmt , flat_map_stmt;
387+ visit_exprs, P <Expr >, filter_map_expr;
388+ 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 ;
391+ }
392+
370393#[ inline]
371394fn visit_vec < T , F > ( elems : & mut Vec < T > , mut visit_elem : F )
372395where
@@ -403,15 +426,6 @@ fn visit_attrs<T: MutVisitor>(vis: &mut T, attrs: &mut AttrVec) {
403426 }
404427}
405428
406- #[ allow( unused) ]
407- fn visit_exprs < T : MutVisitor > ( vis : & mut T , exprs : & mut Vec < P < Expr > > ) {
408- exprs. flat_map_in_place ( |expr| vis. filter_map_expr ( expr) )
409- }
410-
411- fn visit_thin_exprs < T : MutVisitor > ( vis : & mut T , exprs : & mut ThinVec < P < Expr > > ) {
412- exprs. flat_map_in_place ( |expr| vis. filter_map_expr ( expr) )
413- }
414-
415429fn visit_attr_args < T : MutVisitor > ( vis : & mut T , args : & mut AttrArgs ) {
416430 match args {
417431 AttrArgs :: Empty => { }
@@ -430,15 +444,6 @@ fn visit_delim_args<T: MutVisitor>(vis: &mut T, args: &mut DelimArgs) {
430444 vis. visit_span ( close) ;
431445}
432446
433- pub fn walk_pat_field < T : MutVisitor > ( vis : & mut T , fp : & mut PatField ) {
434- let PatField { attrs, id, ident, is_placeholder : _, is_shorthand : _, pat, span } = fp;
435- vis. visit_id ( id) ;
436- visit_attrs ( vis, attrs) ;
437- vis. visit_ident ( ident) ;
438- vis. visit_pat ( pat) ;
439- vis. visit_span ( span) ;
440- }
441-
442447pub fn walk_flat_map_pat_field < T : MutVisitor > (
443448 vis : & mut T ,
444449 mut fp : PatField ,
@@ -447,21 +452,13 @@ pub fn walk_flat_map_pat_field<T: MutVisitor>(
447452 smallvec ! [ fp]
448453}
449454
450- fn walk_use_tree < T : MutVisitor > ( vis : & mut T , use_tree : & mut UseTree ) {
451- let UseTree { prefix, kind, span } = use_tree;
452- vis. visit_path ( prefix) ;
453- match kind {
454- UseTreeKind :: Simple ( rename) => visit_opt ( rename, |rename| vis. visit_ident ( rename) ) ,
455- UseTreeKind :: Nested { items, span } => {
456- for ( tree, id) in items {
457- vis. visit_id ( id) ;
458- vis. visit_use_tree ( tree) ;
459- }
460- vis. visit_span ( span) ;
461- }
462- UseTreeKind :: Glob => { }
463- }
464- 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) ;
465462}
466463
467464pub fn walk_arm < T : MutVisitor > ( vis : & mut T , arm : & mut Arm ) {
@@ -498,31 +495,6 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
498495 vis. visit_span ( span) ;
499496}
500497
501- pub fn walk_ty_pat < T : MutVisitor > ( vis : & mut T , ty : & mut TyPat ) {
502- let TyPat { id, kind, span, tokens : _ } = ty;
503- vis. visit_id ( id) ;
504- match kind {
505- TyPatKind :: Range ( start, end, _include_end) => {
506- visit_opt ( start, |c| vis. visit_anon_const ( c) ) ;
507- visit_opt ( end, |c| vis. visit_anon_const ( c) ) ;
508- }
509- TyPatKind :: Or ( variants) => visit_thin_vec ( variants, |p| vis. visit_ty_pat ( p) ) ,
510- TyPatKind :: Err ( _) => { }
511- }
512- vis. visit_span ( span) ;
513- }
514-
515- pub fn walk_variant < T : MutVisitor > ( visitor : & mut T , variant : & mut Variant ) {
516- let Variant { ident, vis, attrs, id, data, disr_expr, span, is_placeholder : _ } = variant;
517- visitor. visit_id ( id) ;
518- visit_attrs ( visitor, attrs) ;
519- visitor. visit_vis ( vis) ;
520- visitor. visit_ident ( ident) ;
521- visitor. visit_variant_data ( data) ;
522- visit_opt ( disr_expr, |disr_expr| visitor. visit_anon_const ( disr_expr) ) ;
523- visitor. visit_span ( span) ;
524- }
525-
526498pub fn walk_flat_map_variant < T : MutVisitor > (
527499 vis : & mut T ,
528500 mut variant : Variant ,
@@ -531,25 +503,6 @@ pub fn walk_flat_map_variant<T: MutVisitor>(
531503 smallvec ! [ variant]
532504}
533505
534- fn walk_ident < T : MutVisitor > ( vis : & mut T , Ident { name : _, span } : & mut Ident ) {
535- vis. visit_span ( span) ;
536- }
537-
538- fn walk_path < T : MutVisitor > ( vis : & mut T , Path { segments, span, tokens : _ } : & mut Path ) {
539- for segment in segments {
540- vis. visit_path_segment ( segment) ;
541- }
542- vis. visit_span ( span) ;
543- }
544-
545- fn walk_qself < T : MutVisitor > ( vis : & mut T , qself : & mut Option < P < QSelf > > ) {
546- visit_opt ( qself, |qself| {
547- let QSelf { ty, path_span, position : _ } = & mut * * qself;
548- vis. visit_ty ( ty) ;
549- vis. visit_span ( path_span) ;
550- } )
551- }
552-
553506fn walk_generic_args < T : MutVisitor > ( vis : & mut T , generic_args : & mut GenericArgs ) {
554507 match generic_args {
555508 GenericArgs :: AngleBracketed ( data) => vis. visit_angle_bracketed_parameter_data ( data) ,
@@ -583,27 +536,6 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
583536 vis. visit_span ( inputs_span) ;
584537}
585538
586- fn walk_local < T : MutVisitor > ( vis : & mut T , local : & mut Local ) {
587- let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens : _ } = local;
588- visit_opt ( super_, |sp| vis. visit_span ( sp) ) ;
589- vis. visit_id ( id) ;
590- visit_attrs ( vis, attrs) ;
591- vis. visit_pat ( pat) ;
592- visit_opt ( ty, |ty| vis. visit_ty ( ty) ) ;
593- match kind {
594- LocalKind :: Decl => { }
595- LocalKind :: Init ( init) => {
596- vis. visit_expr ( init) ;
597- }
598- LocalKind :: InitElse ( init, els) => {
599- vis. visit_expr ( init) ;
600- vis. visit_block ( els) ;
601- }
602- }
603- visit_opt ( colon_sp, |sp| vis. visit_span ( sp) ) ;
604- vis. visit_span ( span) ;
605- }
606-
607539fn walk_attribute < T : MutVisitor > ( vis : & mut T , attr : & mut Attribute ) {
608540 let Attribute { kind, id : _, style : _, span } = attr;
609541 match kind {
@@ -853,35 +785,6 @@ fn walk_variant_data<T: MutVisitor>(vis: &mut T, vdata: &mut VariantData) {
853785 }
854786}
855787
856- fn walk_trait_ref < T : MutVisitor > ( vis : & mut T , TraitRef { path, ref_id } : & mut TraitRef ) {
857- vis. visit_id ( ref_id) ;
858- vis. visit_path ( path) ;
859- }
860-
861- fn walk_poly_trait_ref < T : MutVisitor > ( vis : & mut T , p : & mut PolyTraitRef ) {
862- let PolyTraitRef { bound_generic_params, modifiers, trait_ref, span } = p;
863- vis. visit_modifiers ( modifiers) ;
864- bound_generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
865- vis. visit_trait_ref ( trait_ref) ;
866- vis. visit_span ( span) ;
867- }
868-
869- fn walk_modifiers < V : MutVisitor > ( vis : & mut V , m : & mut TraitBoundModifiers ) {
870- let TraitBoundModifiers { constness, asyncness, polarity } = m;
871- match constness {
872- BoundConstness :: Never => { }
873- BoundConstness :: Always ( span) | BoundConstness :: Maybe ( span) => vis. visit_span ( span) ,
874- }
875- match asyncness {
876- BoundAsyncness :: Normal => { }
877- BoundAsyncness :: Async ( span) => vis. visit_span ( span) ,
878- }
879- match polarity {
880- BoundPolarity :: Positive => { }
881- BoundPolarity :: Negative ( span) | BoundPolarity :: Maybe ( span) => vis. visit_span ( span) ,
882- }
883- }
884-
885788pub fn walk_field_def < T : MutVisitor > ( visitor : & mut T , fd : & mut FieldDef ) {
886789 let FieldDef { span, ident, vis, id, ty, attrs, is_placeholder : _, safety, default } = fd;
887790 visitor. visit_id ( id) ;
@@ -902,15 +805,6 @@ pub fn walk_flat_map_field_def<T: MutVisitor>(
902805 smallvec ! [ fd]
903806}
904807
905- pub fn walk_expr_field < T : MutVisitor > ( vis : & mut T , f : & mut ExprField ) {
906- let ExprField { ident, expr, span, is_shorthand : _, attrs, id, is_placeholder : _ } = f;
907- vis. visit_id ( id) ;
908- visit_attrs ( vis, attrs) ;
909- vis. visit_ident ( ident) ;
910- vis. visit_expr ( expr) ;
911- vis. visit_span ( span) ;
912- }
913-
914808pub fn walk_flat_map_expr_field < T : MutVisitor > (
915809 vis : & mut T ,
916810 mut f : ExprField ,
@@ -930,16 +824,6 @@ pub fn walk_item_kind<K: WalkItemKind>(
930824 kind. walk ( span, id, visibility, ctxt, vis)
931825}
932826
933- pub fn walk_crate < T : MutVisitor > ( vis : & mut T , krate : & mut Crate ) {
934- let Crate { attrs, items, spans, id, is_placeholder : _ } = krate;
935- vis. visit_id ( id) ;
936- visit_attrs ( vis, attrs) ;
937- items. flat_map_in_place ( |item| vis. flat_map_item ( item) ) ;
938- let ModSpans { inner_span, inject_use_span } = spans;
939- vis. visit_span ( inner_span) ;
940- vis. visit_span ( inject_use_span) ;
941- }
942-
943827pub fn walk_flat_map_item ( vis : & mut impl MutVisitor , mut item : P < Item > ) -> SmallVec < [ P < Item > ; 1 ] > {
944828 vis. visit_item ( & mut item) ;
945829 smallvec ! [ item]
@@ -1021,18 +905,18 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1021905 vis. visit_id ( id) ;
1022906 visit_attrs ( vis, attrs) ;
1023907 match kind {
1024- ExprKind :: Array ( exprs) => visit_thin_exprs ( vis, exprs) ,
908+ ExprKind :: Array ( exprs) => visit_exprs ( vis, exprs) ,
1025909 ExprKind :: ConstBlock ( anon_const) => {
1026910 vis. visit_anon_const ( anon_const) ;
1027911 }
1028912 ExprKind :: Repeat ( expr, count) => {
1029913 vis. visit_expr ( expr) ;
1030914 vis. visit_anon_const ( count) ;
1031915 }
1032- ExprKind :: Tup ( exprs) => visit_thin_exprs ( vis, exprs) ,
916+ ExprKind :: Tup ( exprs) => visit_exprs ( vis, exprs) ,
1033917 ExprKind :: Call ( f, args) => {
1034918 vis. visit_expr ( f) ;
1035- visit_thin_exprs ( vis, args) ;
919+ visit_exprs ( vis, args) ;
1036920 }
1037921 ExprKind :: MethodCall ( box MethodCall {
1038922 seg : PathSegment { ident, id, args : seg_args } ,
@@ -1044,7 +928,7 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1044928 vis. visit_id ( id) ;
1045929 vis. visit_ident ( ident) ;
1046930 visit_opt ( seg_args, |args| vis. visit_generic_args ( args) ) ;
1047- visit_thin_exprs ( vis, call_args) ;
931+ visit_exprs ( vis, call_args) ;
1048932 vis. visit_span ( span) ;
1049933 }
1050934 ExprKind :: Binary ( binop, lhs, rhs) => {
0 commit comments