@@ -207,6 +207,10 @@ pub trait MutVisitor: Sized {
207207 noop_visit_path ( p, self ) ;
208208 }
209209
210+ fn flat_map_path_segment ( & mut self , p : PathSegment ) -> SmallVec < [ PathSegment ; 1 ] > {
211+ noop_flat_map_path_segment ( p, self )
212+ }
213+
210214 fn visit_qself ( & mut self , qs : & mut Option < P < QSelf > > ) {
211215 noop_visit_qself ( qs, self ) ;
212216 }
@@ -554,12 +558,19 @@ fn noop_visit_ident<T: MutVisitor>(Ident { name: _, span }: &mut Ident, vis: &mu
554558 vis. visit_span ( span) ;
555559}
556560
561+ fn noop_flat_map_path_segment < T : MutVisitor > (
562+ mut segment : PathSegment ,
563+ vis : & mut T ,
564+ ) -> SmallVec < [ PathSegment ; 1 ] > {
565+ let PathSegment { ident, id, args } = & mut segment;
566+ vis. visit_id ( id) ;
567+ vis. visit_ident ( ident) ;
568+ visit_opt ( args, |args| vis. visit_generic_args ( args) ) ;
569+ smallvec ! [ segment]
570+ }
571+
557572fn noop_visit_path < T : MutVisitor > ( Path { segments, span, tokens } : & mut Path , vis : & mut T ) {
558- for PathSegment { ident, id, args } in segments {
559- vis. visit_id ( id) ;
560- vis. visit_ident ( ident) ;
561- visit_opt ( args, |args| vis. visit_generic_args ( args) ) ;
562- }
573+ segments. flat_map_in_place ( |segment| vis. flat_map_path_segment ( segment) ) ;
563574 visit_lazy_tts ( tokens, vis) ;
564575 vis. visit_span ( span) ;
565576}
0 commit comments