@@ -4,7 +4,7 @@ use core::ops::ControlFlow;
44use rustc_ast as ast;
55use rustc_ast:: mut_visit:: MutVisitor ;
66use rustc_ast:: ptr:: P ;
7- use rustc_ast:: visit:: Visitor ;
7+ use rustc_ast:: visit:: { AssocCtxt , Visitor } ;
88use rustc_ast:: NodeId ;
99use rustc_ast:: { mut_visit, visit} ;
1010use rustc_ast:: { Attribute , HasAttrs , HasTokens } ;
@@ -53,11 +53,8 @@ fn flat_map_annotatable(
5353) -> Option < Annotatable > {
5454 match annotatable {
5555 Annotatable :: Item ( item) => vis. flat_map_item ( item) . pop ( ) . map ( Annotatable :: Item ) ,
56- Annotatable :: TraitItem ( item) => {
57- vis. flat_map_trait_item ( item) . pop ( ) . map ( Annotatable :: TraitItem )
58- }
59- Annotatable :: ImplItem ( item) => {
60- vis. flat_map_impl_item ( item) . pop ( ) . map ( Annotatable :: ImplItem )
56+ Annotatable :: AssocItem ( item, ctxt) => {
57+ Some ( Annotatable :: AssocItem ( vis. flat_map_assoc_item ( item, ctxt) . pop ( ) ?, ctxt) )
6158 }
6259 Annotatable :: ForeignItem ( item) => {
6360 vis. flat_map_foreign_item ( item) . pop ( ) . map ( Annotatable :: ForeignItem )
@@ -106,8 +103,7 @@ fn has_cfg_or_cfg_attr(annotatable: &Annotatable) -> bool {
106103
107104 let res = match annotatable {
108105 Annotatable :: Item ( item) => CfgFinder . visit_item ( item) ,
109- Annotatable :: TraitItem ( item) => CfgFinder . visit_assoc_item ( item, visit:: AssocCtxt :: Trait ) ,
110- Annotatable :: ImplItem ( item) => CfgFinder . visit_assoc_item ( item, visit:: AssocCtxt :: Impl ) ,
106+ Annotatable :: AssocItem ( item, ctxt) => CfgFinder . visit_assoc_item ( item, * ctxt) ,
111107 Annotatable :: ForeignItem ( item) => CfgFinder . visit_foreign_item ( item) ,
112108 Annotatable :: Stmt ( stmt) => CfgFinder . visit_stmt ( stmt) ,
113109 Annotatable :: Expr ( expr) => CfgFinder . visit_expr ( expr) ,
@@ -150,14 +146,16 @@ impl CfgEval<'_> {
150146 Annotatable :: Item ( _) => {
151147 |parser| Ok ( Annotatable :: Item ( parser. parse_item ( ForceCollect :: Yes ) ?. unwrap ( ) ) )
152148 }
153- Annotatable :: TraitItem ( _ ) => |parser| {
154- Ok ( Annotatable :: TraitItem (
149+ Annotatable :: AssocItem ( _ , AssocCtxt :: Trait ) => |parser| {
150+ Ok ( Annotatable :: AssocItem (
155151 parser. parse_trait_item ( ForceCollect :: Yes ) ?. unwrap ( ) . unwrap ( ) ,
152+ AssocCtxt :: Trait ,
156153 ) )
157154 } ,
158- Annotatable :: ImplItem ( _ ) => |parser| {
159- Ok ( Annotatable :: ImplItem (
155+ Annotatable :: AssocItem ( _ , AssocCtxt :: Impl ) => |parser| {
156+ Ok ( Annotatable :: AssocItem (
160157 parser. parse_impl_item ( ForceCollect :: Yes ) ?. unwrap ( ) . unwrap ( ) ,
158+ AssocCtxt :: Impl ,
161159 ) )
162160 } ,
163161 Annotatable :: ForeignItem ( _) => |parser| {
@@ -214,72 +212,83 @@ impl MutVisitor for CfgEval<'_> {
214212 #[ instrument( level = "trace" , skip( self ) ) ]
215213 fn visit_expr ( & mut self , expr : & mut P < ast:: Expr > ) {
216214 self . 0 . configure_expr ( expr, false ) ;
217- mut_visit:: noop_visit_expr ( expr , self ) ;
215+ mut_visit:: walk_expr ( self , expr ) ;
218216 }
219217
220218 #[ instrument( level = "trace" , skip( self ) ) ]
221219 fn visit_method_receiver_expr ( & mut self , expr : & mut P < ast:: Expr > ) {
222220 self . 0 . configure_expr ( expr, true ) ;
223- mut_visit:: noop_visit_expr ( expr , self ) ;
221+ mut_visit:: walk_expr ( self , expr ) ;
224222 }
225223
226224 fn filter_map_expr ( & mut self , expr : P < ast:: Expr > ) -> Option < P < ast:: Expr > > {
227225 let mut expr = configure ! ( self , expr) ;
228- mut_visit:: noop_visit_expr ( & mut expr, self ) ;
226+ mut_visit:: walk_expr ( self , & mut expr) ;
229227 Some ( expr)
230228 }
231229
232230 fn flat_map_generic_param (
233231 & mut self ,
234232 param : ast:: GenericParam ,
235233 ) -> SmallVec < [ ast:: GenericParam ; 1 ] > {
236- mut_visit:: noop_flat_map_generic_param ( configure ! ( self , param) , self )
234+ let param = configure ! ( self , param) ;
235+ mut_visit:: walk_flat_map_generic_param ( self , param)
237236 }
238237
239238 fn flat_map_stmt ( & mut self , stmt : ast:: Stmt ) -> SmallVec < [ ast:: Stmt ; 1 ] > {
240- mut_visit:: noop_flat_map_stmt ( configure ! ( self , stmt) , self )
239+ let stmt = configure ! ( self , stmt) ;
240+ mut_visit:: walk_flat_map_stmt ( self , stmt)
241241 }
242242
243243 fn flat_map_item ( & mut self , item : P < ast:: Item > ) -> SmallVec < [ P < ast:: Item > ; 1 ] > {
244- mut_visit:: noop_flat_map_item ( configure ! ( self , item) , self )
245- }
246-
247- fn flat_map_impl_item ( & mut self , item : P < ast:: AssocItem > ) -> SmallVec < [ P < ast:: AssocItem > ; 1 ] > {
248- mut_visit:: noop_flat_map_item ( configure ! ( self , item) , self )
244+ let item = configure ! ( self , item) ;
245+ mut_visit:: walk_flat_map_item ( self , item)
249246 }
250247
251- fn flat_map_trait_item ( & mut self , item : P < ast:: AssocItem > ) -> SmallVec < [ P < ast:: AssocItem > ; 1 ] > {
252- mut_visit:: noop_flat_map_item ( configure ! ( self , item) , self )
248+ fn flat_map_assoc_item (
249+ & mut self ,
250+ item : P < ast:: AssocItem > ,
251+ _ctxt : AssocCtxt ,
252+ ) -> SmallVec < [ P < ast:: AssocItem > ; 1 ] > {
253+ let item = configure ! ( self , item) ;
254+ mut_visit:: walk_flat_map_item ( self , item)
253255 }
254256
255257 fn flat_map_foreign_item (
256258 & mut self ,
257259 foreign_item : P < ast:: ForeignItem > ,
258260 ) -> SmallVec < [ P < ast:: ForeignItem > ; 1 ] > {
259- mut_visit:: noop_flat_map_item ( configure ! ( self , foreign_item) , self )
261+ let foreign_item = configure ! ( self , foreign_item) ;
262+ mut_visit:: walk_flat_map_item ( self , foreign_item)
260263 }
261264
262265 fn flat_map_arm ( & mut self , arm : ast:: Arm ) -> SmallVec < [ ast:: Arm ; 1 ] > {
263- mut_visit:: noop_flat_map_arm ( configure ! ( self , arm) , self )
266+ let arm = configure ! ( self , arm) ;
267+ mut_visit:: walk_flat_map_arm ( self , arm)
264268 }
265269
266270 fn flat_map_expr_field ( & mut self , field : ast:: ExprField ) -> SmallVec < [ ast:: ExprField ; 1 ] > {
267- mut_visit:: noop_flat_map_expr_field ( configure ! ( self , field) , self )
271+ let field = configure ! ( self , field) ;
272+ mut_visit:: walk_flat_map_expr_field ( self , field)
268273 }
269274
270275 fn flat_map_pat_field ( & mut self , fp : ast:: PatField ) -> SmallVec < [ ast:: PatField ; 1 ] > {
271- mut_visit:: noop_flat_map_pat_field ( configure ! ( self , fp) , self )
276+ let fp = configure ! ( self , fp) ;
277+ mut_visit:: walk_flat_map_pat_field ( self , fp)
272278 }
273279
274280 fn flat_map_param ( & mut self , p : ast:: Param ) -> SmallVec < [ ast:: Param ; 1 ] > {
275- mut_visit:: noop_flat_map_param ( configure ! ( self , p) , self )
281+ let p = configure ! ( self , p) ;
282+ mut_visit:: walk_flat_map_param ( self , p)
276283 }
277284
278285 fn flat_map_field_def ( & mut self , sf : ast:: FieldDef ) -> SmallVec < [ ast:: FieldDef ; 1 ] > {
279- mut_visit:: noop_flat_map_field_def ( configure ! ( self , sf) , self )
286+ let sf = configure ! ( self , sf) ;
287+ mut_visit:: walk_flat_map_field_def ( self , sf)
280288 }
281289
282290 fn flat_map_variant ( & mut self , variant : ast:: Variant ) -> SmallVec < [ ast:: Variant ; 1 ] > {
283- mut_visit:: noop_flat_map_variant ( configure ! ( self , variant) , self )
291+ let variant = configure ! ( self , variant) ;
292+ mut_visit:: walk_flat_map_variant ( self , variant)
284293 }
285294}
0 commit comments