@@ -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