@@ -4,7 +4,7 @@ use core::ops::ControlFlow;
4
4
use rustc_ast as ast;
5
5
use rustc_ast:: mut_visit:: MutVisitor ;
6
6
use rustc_ast:: ptr:: P ;
7
- use rustc_ast:: visit:: Visitor ;
7
+ use rustc_ast:: visit:: { AssocCtxt , Visitor } ;
8
8
use rustc_ast:: NodeId ;
9
9
use rustc_ast:: { mut_visit, visit} ;
10
10
use rustc_ast:: { Attribute , HasAttrs , HasTokens } ;
@@ -53,11 +53,8 @@ fn flat_map_annotatable(
53
53
) -> Option < Annotatable > {
54
54
match annotatable {
55
55
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) )
61
58
}
62
59
Annotatable :: ForeignItem ( item) => {
63
60
vis. flat_map_foreign_item ( item) . pop ( ) . map ( Annotatable :: ForeignItem )
@@ -106,8 +103,7 @@ fn has_cfg_or_cfg_attr(annotatable: &Annotatable) -> bool {
106
103
107
104
let res = match annotatable {
108
105
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) ,
111
107
Annotatable :: ForeignItem ( item) => CfgFinder . visit_foreign_item ( item) ,
112
108
Annotatable :: Stmt ( stmt) => CfgFinder . visit_stmt ( stmt) ,
113
109
Annotatable :: Expr ( expr) => CfgFinder . visit_expr ( expr) ,
@@ -150,14 +146,16 @@ impl CfgEval<'_> {
150
146
Annotatable :: Item ( _) => {
151
147
|parser| Ok ( Annotatable :: Item ( parser. parse_item ( ForceCollect :: Yes ) ?. unwrap ( ) ) )
152
148
}
153
- Annotatable :: TraitItem ( _ ) => |parser| {
154
- Ok ( Annotatable :: TraitItem (
149
+ Annotatable :: AssocItem ( _ , AssocCtxt :: Trait ) => |parser| {
150
+ Ok ( Annotatable :: AssocItem (
155
151
parser. parse_trait_item ( ForceCollect :: Yes ) ?. unwrap ( ) . unwrap ( ) ,
152
+ AssocCtxt :: Trait ,
156
153
) )
157
154
} ,
158
- Annotatable :: ImplItem ( _ ) => |parser| {
159
- Ok ( Annotatable :: ImplItem (
155
+ Annotatable :: AssocItem ( _ , AssocCtxt :: Impl ) => |parser| {
156
+ Ok ( Annotatable :: AssocItem (
160
157
parser. parse_impl_item ( ForceCollect :: Yes ) ?. unwrap ( ) . unwrap ( ) ,
158
+ AssocCtxt :: Impl ,
161
159
) )
162
160
} ,
163
161
Annotatable :: ForeignItem ( _) => |parser| {
@@ -214,72 +212,83 @@ impl MutVisitor for CfgEval<'_> {
214
212
#[ instrument( level = "trace" , skip( self ) ) ]
215
213
fn visit_expr ( & mut self , expr : & mut P < ast:: Expr > ) {
216
214
self . 0 . configure_expr ( expr, false ) ;
217
- mut_visit:: noop_visit_expr ( expr , self ) ;
215
+ mut_visit:: walk_expr ( self , expr ) ;
218
216
}
219
217
220
218
#[ instrument( level = "trace" , skip( self ) ) ]
221
219
fn visit_method_receiver_expr ( & mut self , expr : & mut P < ast:: Expr > ) {
222
220
self . 0 . configure_expr ( expr, true ) ;
223
- mut_visit:: noop_visit_expr ( expr , self ) ;
221
+ mut_visit:: walk_expr ( self , expr ) ;
224
222
}
225
223
226
224
fn filter_map_expr ( & mut self , expr : P < ast:: Expr > ) -> Option < P < ast:: Expr > > {
227
225
let mut expr = configure ! ( self , expr) ;
228
- mut_visit:: noop_visit_expr ( & mut expr, self ) ;
226
+ mut_visit:: walk_expr ( self , & mut expr) ;
229
227
Some ( expr)
230
228
}
231
229
232
230
fn flat_map_generic_param (
233
231
& mut self ,
234
232
param : ast:: GenericParam ,
235
233
) -> 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)
237
236
}
238
237
239
238
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)
241
241
}
242
242
243
243
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)
249
246
}
250
247
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)
253
255
}
254
256
255
257
fn flat_map_foreign_item (
256
258
& mut self ,
257
259
foreign_item : P < ast:: ForeignItem > ,
258
260
) -> 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)
260
263
}
261
264
262
265
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)
264
268
}
265
269
266
270
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)
268
273
}
269
274
270
275
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)
272
278
}
273
279
274
280
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)
276
283
}
277
284
278
285
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)
280
288
}
281
289
282
290
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)
284
293
}
285
294
}
0 commit comments