@@ -208,11 +208,7 @@ pub trait MutVisitor: Sized {
208
208
}
209
209
210
210
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 ) ;
216
212
}
217
213
218
214
fn visit_path ( & mut self , p : & mut Path ) {
@@ -367,6 +363,33 @@ pub trait MutVisitor: Sized {
367
363
368
364
super :: common_visitor_and_walkers!( ( mut ) MutVisitor ) ;
369
365
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
+
370
393
#[ inline]
371
394
fn visit_vec < T , F > ( elems : & mut Vec < T > , mut visit_elem : F )
372
395
where
@@ -403,15 +426,6 @@ fn visit_attrs<T: MutVisitor>(vis: &mut T, attrs: &mut AttrVec) {
403
426
}
404
427
}
405
428
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
-
415
429
fn visit_attr_args < T : MutVisitor > ( vis : & mut T , args : & mut AttrArgs ) {
416
430
match args {
417
431
AttrArgs :: Empty => { }
@@ -430,15 +444,6 @@ fn visit_delim_args<T: MutVisitor>(vis: &mut T, args: &mut DelimArgs) {
430
444
vis. visit_span ( close) ;
431
445
}
432
446
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
-
442
447
pub fn walk_flat_map_pat_field < T : MutVisitor > (
443
448
vis : & mut T ,
444
449
mut fp : PatField ,
@@ -447,21 +452,13 @@ pub fn walk_flat_map_pat_field<T: MutVisitor>(
447
452
smallvec ! [ fp]
448
453
}
449
454
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) ;
465
462
}
466
463
467
464
pub fn walk_arm < T : MutVisitor > ( vis : & mut T , arm : & mut Arm ) {
@@ -498,31 +495,6 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
498
495
vis. visit_span ( span) ;
499
496
}
500
497
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
-
526
498
pub fn walk_flat_map_variant < T : MutVisitor > (
527
499
vis : & mut T ,
528
500
mut variant : Variant ,
@@ -531,25 +503,6 @@ pub fn walk_flat_map_variant<T: MutVisitor>(
531
503
smallvec ! [ variant]
532
504
}
533
505
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
-
553
506
fn walk_generic_args < T : MutVisitor > ( vis : & mut T , generic_args : & mut GenericArgs ) {
554
507
match generic_args {
555
508
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
583
536
vis. visit_span ( inputs_span) ;
584
537
}
585
538
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
-
607
539
fn walk_attribute < T : MutVisitor > ( vis : & mut T , attr : & mut Attribute ) {
608
540
let Attribute { kind, id : _, style : _, span } = attr;
609
541
match kind {
@@ -853,35 +785,6 @@ fn walk_variant_data<T: MutVisitor>(vis: &mut T, vdata: &mut VariantData) {
853
785
}
854
786
}
855
787
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
-
885
788
pub fn walk_field_def < T : MutVisitor > ( visitor : & mut T , fd : & mut FieldDef ) {
886
789
let FieldDef { span, ident, vis, id, ty, attrs, is_placeholder : _, safety, default } = fd;
887
790
visitor. visit_id ( id) ;
@@ -902,15 +805,6 @@ pub fn walk_flat_map_field_def<T: MutVisitor>(
902
805
smallvec ! [ fd]
903
806
}
904
807
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
-
914
808
pub fn walk_flat_map_expr_field < T : MutVisitor > (
915
809
vis : & mut T ,
916
810
mut f : ExprField ,
@@ -930,16 +824,6 @@ pub fn walk_item_kind<K: WalkItemKind>(
930
824
kind. walk ( span, id, visibility, ctxt, vis)
931
825
}
932
826
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
-
943
827
pub fn walk_flat_map_item ( vis : & mut impl MutVisitor , mut item : P < Item > ) -> SmallVec < [ P < Item > ; 1 ] > {
944
828
vis. visit_item ( & mut item) ;
945
829
smallvec ! [ item]
@@ -1021,18 +905,18 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1021
905
vis. visit_id ( id) ;
1022
906
visit_attrs ( vis, attrs) ;
1023
907
match kind {
1024
- ExprKind :: Array ( exprs) => visit_thin_exprs ( vis, exprs) ,
908
+ ExprKind :: Array ( exprs) => visit_exprs ( vis, exprs) ,
1025
909
ExprKind :: ConstBlock ( anon_const) => {
1026
910
vis. visit_anon_const ( anon_const) ;
1027
911
}
1028
912
ExprKind :: Repeat ( expr, count) => {
1029
913
vis. visit_expr ( expr) ;
1030
914
vis. visit_anon_const ( count) ;
1031
915
}
1032
- ExprKind :: Tup ( exprs) => visit_thin_exprs ( vis, exprs) ,
916
+ ExprKind :: Tup ( exprs) => visit_exprs ( vis, exprs) ,
1033
917
ExprKind :: Call ( f, args) => {
1034
918
vis. visit_expr ( f) ;
1035
- visit_thin_exprs ( vis, args) ;
919
+ visit_exprs ( vis, args) ;
1036
920
}
1037
921
ExprKind :: MethodCall ( box MethodCall {
1038
922
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
1044
928
vis. visit_id ( id) ;
1045
929
vis. visit_ident ( ident) ;
1046
930
visit_opt ( seg_args, |args| vis. visit_generic_args ( args) ) ;
1047
- visit_thin_exprs ( vis, call_args) ;
931
+ visit_exprs ( vis, call_args) ;
1048
932
vis. visit_span ( span) ;
1049
933
}
1050
934
ExprKind :: Binary ( binop, lhs, rhs) => {
0 commit comments