@@ -1788,8 +1788,8 @@ pub mod mut_visit {
1788
1788
}
1789
1789
}
1790
1790
1791
- pub trait WalkItemKind {
1792
- fn walk ( & mut self , span : Span , id : NodeId , visitor : & mut impl MutVisitor ) ;
1791
+ pub trait WalkItemKind : Sized {
1792
+ fn walk ( item : & mut Item < Self > , visitor : & mut impl MutVisitor ) ;
1793
1793
}
1794
1794
1795
1795
make_ast_visitor ! ( MutVisitor , mut ) ;
@@ -2279,69 +2279,65 @@ pub mod mut_visit {
2279
2279
}
2280
2280
}
2281
2281
2282
- pub fn walk_item_kind (
2283
- kind : & mut impl WalkItemKind ,
2284
- span : Span ,
2285
- id : NodeId ,
2286
- vis : & mut impl MutVisitor ,
2287
- ) {
2288
- kind. walk ( span, id, vis)
2289
- }
2290
-
2291
2282
impl WalkItemKind for ItemKind {
2292
- fn walk ( & mut self , span : Span , id : NodeId , vis : & mut impl MutVisitor ) {
2293
- match self {
2283
+ fn walk ( item : & mut Item < Self > , visitor : & mut impl MutVisitor ) {
2284
+ let Item { attrs, id, span, vis, ident, kind, tokens } = item;
2285
+ visitor. visit_id ( id) ;
2286
+ visit_attrs ( visitor, attrs) ;
2287
+ visitor. visit_vis ( vis) ;
2288
+ visitor. visit_ident ( ident) ;
2289
+ match kind {
2294
2290
ItemKind :: ExternCrate ( _orig_name) => { }
2295
- ItemKind :: Use ( use_tree) => vis . visit_use_tree ( use_tree, id, false ) ,
2291
+ ItemKind :: Use ( use_tree) => visitor . visit_use_tree ( use_tree, * id, false ) ,
2296
2292
ItemKind :: Static ( box StaticItem { ty, safety : _, mutability : _, expr } ) => {
2297
- vis . visit_ty ( ty) ;
2298
- visit_opt ( expr, |expr| vis . visit_expr ( expr) ) ;
2293
+ visitor . visit_ty ( ty) ;
2294
+ visit_opt ( expr, |expr| visitor . visit_expr ( expr) ) ;
2299
2295
}
2300
2296
ItemKind :: Const ( item) => {
2301
- visit_const_item ( item, vis ) ;
2297
+ visit_const_item ( item, visitor ) ;
2302
2298
}
2303
2299
ItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
2304
- visit_defaultness ( vis , defaultness) ;
2305
- vis . visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
2300
+ visit_defaultness ( visitor , defaultness) ;
2301
+ visitor . visit_fn ( FnKind :: Fn ( sig, generics, body) , * span, * id) ;
2306
2302
}
2307
2303
ItemKind :: Mod ( safety, mod_kind) => {
2308
- visit_safety ( vis , safety) ;
2304
+ visit_safety ( visitor , safety) ;
2309
2305
match mod_kind {
2310
2306
ModKind :: Loaded (
2311
2307
items,
2312
2308
_inline,
2313
2309
ModSpans { inner_span, inject_use_span } ,
2314
2310
) => {
2315
- items. flat_map_in_place ( |item| vis . flat_map_item ( item) ) ;
2316
- vis . visit_span ( inner_span) ;
2317
- vis . visit_span ( inject_use_span) ;
2311
+ items. flat_map_in_place ( |item| visitor . flat_map_item ( item) ) ;
2312
+ visitor . visit_span ( inner_span) ;
2313
+ visitor . visit_span ( inject_use_span) ;
2318
2314
}
2319
2315
ModKind :: Unloaded => { }
2320
2316
}
2321
2317
}
2322
- ItemKind :: ForeignMod ( nm) => vis . visit_foreign_mod ( nm) ,
2323
- ItemKind :: GlobalAsm ( asm) => vis . visit_inline_asm ( asm) ,
2318
+ ItemKind :: ForeignMod ( nm) => visitor . visit_foreign_mod ( nm) ,
2319
+ ItemKind :: GlobalAsm ( asm) => visitor . visit_inline_asm ( asm) ,
2324
2320
ItemKind :: TyAlias ( box TyAlias {
2325
2321
defaultness,
2326
2322
generics,
2327
2323
where_clauses,
2328
2324
bounds,
2329
2325
ty,
2330
2326
} ) => {
2331
- visit_defaultness ( vis , defaultness) ;
2332
- vis . visit_generics ( generics) ;
2333
- visit_bounds ( vis , bounds, BoundKind :: Bound ) ;
2334
- visit_opt ( ty, |ty| vis . visit_ty ( ty) ) ;
2335
- walk_ty_alias_where_clauses ( vis , where_clauses) ;
2327
+ visit_defaultness ( visitor , defaultness) ;
2328
+ visitor . visit_generics ( generics) ;
2329
+ visit_bounds ( visitor , bounds, BoundKind :: Bound ) ;
2330
+ visit_opt ( ty, |ty| visitor . visit_ty ( ty) ) ;
2331
+ walk_ty_alias_where_clauses ( visitor , where_clauses) ;
2336
2332
}
2337
2333
ItemKind :: Enum ( enum_def, generics) => {
2338
- vis . visit_generics ( generics) ;
2339
- vis . visit_enum_def ( enum_def) ;
2334
+ visitor . visit_generics ( generics) ;
2335
+ visitor . visit_enum_def ( enum_def) ;
2340
2336
}
2341
2337
ItemKind :: Struct ( variant_data, generics)
2342
2338
| ItemKind :: Union ( variant_data, generics) => {
2343
- vis . visit_generics ( generics) ;
2344
- vis . visit_variant_data ( variant_data) ;
2339
+ visitor . visit_generics ( generics) ;
2340
+ visitor . visit_variant_data ( variant_data) ;
2345
2341
}
2346
2342
ItemKind :: Impl ( box Impl {
2347
2343
defaultness,
@@ -2353,27 +2349,27 @@ pub mod mut_visit {
2353
2349
self_ty,
2354
2350
items,
2355
2351
} ) => {
2356
- visit_defaultness ( vis , defaultness) ;
2357
- visit_safety ( vis , safety) ;
2358
- vis . visit_generics ( generics) ;
2359
- visit_constness ( vis , constness) ;
2360
- visit_polarity ( vis , polarity) ;
2361
- visit_opt ( of_trait, |trait_ref| vis . visit_trait_ref ( trait_ref) ) ;
2362
- vis . visit_ty ( self_ty) ;
2363
- items. flat_map_in_place ( |item| vis . flat_map_assoc_item ( item, AssocCtxt :: Impl ) ) ;
2352
+ visit_defaultness ( visitor , defaultness) ;
2353
+ visit_safety ( visitor , safety) ;
2354
+ visitor . visit_generics ( generics) ;
2355
+ visit_constness ( visitor , constness) ;
2356
+ visit_polarity ( visitor , polarity) ;
2357
+ visit_opt ( of_trait, |trait_ref| visitor . visit_trait_ref ( trait_ref) ) ;
2358
+ visitor . visit_ty ( self_ty) ;
2359
+ items. flat_map_in_place ( |item| visitor . flat_map_assoc_item ( item, AssocCtxt :: Impl ) ) ;
2364
2360
}
2365
2361
ItemKind :: Trait ( box Trait { safety, is_auto : _, generics, bounds, items } ) => {
2366
- visit_safety ( vis , safety) ;
2367
- vis . visit_generics ( generics) ;
2368
- visit_bounds ( vis , bounds, BoundKind :: Bound ) ;
2369
- items. flat_map_in_place ( |item| vis . flat_map_assoc_item ( item, AssocCtxt :: Trait ) ) ;
2362
+ visit_safety ( visitor , safety) ;
2363
+ visitor . visit_generics ( generics) ;
2364
+ visit_bounds ( visitor , bounds, BoundKind :: Bound ) ;
2365
+ items. flat_map_in_place ( |item| visitor . flat_map_assoc_item ( item, AssocCtxt :: Trait ) ) ;
2370
2366
}
2371
2367
ItemKind :: TraitAlias ( generics, bounds) => {
2372
- vis . visit_generics ( generics) ;
2373
- visit_bounds ( vis , bounds, BoundKind :: Bound ) ;
2368
+ visitor . visit_generics ( generics) ;
2369
+ visit_bounds ( visitor , bounds, BoundKind :: Bound ) ;
2374
2370
}
2375
- ItemKind :: MacCall ( m) => vis . visit_mac_call ( m) ,
2376
- ItemKind :: MacroDef ( def) => vis . visit_macro_def ( def) ,
2371
+ ItemKind :: MacCall ( m) => visitor . visit_mac_call ( m) ,
2372
+ ItemKind :: MacroDef ( def) => visitor . visit_macro_def ( def) ,
2377
2373
ItemKind :: Delegation ( box Delegation {
2378
2374
id,
2379
2375
qself,
@@ -2382,44 +2378,51 @@ pub mod mut_visit {
2382
2378
body,
2383
2379
from_glob : _,
2384
2380
} ) => {
2385
- vis . visit_id ( id) ;
2386
- vis . visit_qself ( qself) ;
2387
- vis . visit_path ( path, * id) ;
2381
+ visitor . visit_id ( id) ;
2382
+ visitor . visit_qself ( qself) ;
2383
+ visitor . visit_path ( path, * id) ;
2388
2384
if let Some ( rename) = rename {
2389
- vis . visit_ident ( rename) ;
2385
+ visitor . visit_ident ( rename) ;
2390
2386
}
2391
2387
if let Some ( body) = body {
2392
- vis . visit_block ( body) ;
2388
+ visitor . visit_block ( body) ;
2393
2389
}
2394
2390
}
2395
2391
ItemKind :: DelegationMac ( box DelegationMac { qself, prefix, suffixes, body } ) => {
2396
- vis . visit_qself ( qself) ;
2397
- vis . visit_path ( prefix, id) ;
2392
+ visitor . visit_qself ( qself) ;
2393
+ visitor . visit_path ( prefix, * id) ;
2398
2394
if let Some ( suffixes) = suffixes {
2399
2395
for ( ident, rename) in suffixes {
2400
- vis . visit_ident ( ident) ;
2396
+ visitor . visit_ident ( ident) ;
2401
2397
if let Some ( rename) = rename {
2402
- vis . visit_ident ( rename) ;
2398
+ visitor . visit_ident ( rename) ;
2403
2399
}
2404
2400
}
2405
2401
}
2406
2402
if let Some ( body) = body {
2407
- vis . visit_block ( body) ;
2403
+ visitor . visit_block ( body) ;
2408
2404
}
2409
2405
}
2410
2406
}
2407
+ visit_lazy_tts ( visitor, tokens) ;
2408
+ visitor. visit_span ( span) ;
2411
2409
}
2412
2410
}
2413
2411
2414
2412
impl WalkItemKind for AssocItemKind {
2415
- fn walk ( & mut self , span : Span , id : NodeId , visitor : & mut impl MutVisitor ) {
2416
- match self {
2413
+ fn walk ( item : & mut Item < Self > , visitor : & mut impl MutVisitor ) {
2414
+ let Item { attrs, id, span, vis, ident, kind, tokens } = item;
2415
+ visitor. visit_id ( id) ;
2416
+ visit_attrs ( visitor, attrs) ;
2417
+ visitor. visit_vis ( vis) ;
2418
+ visitor. visit_ident ( ident) ;
2419
+ match kind {
2417
2420
AssocItemKind :: Const ( item) => {
2418
2421
visit_const_item ( item, visitor) ;
2419
2422
}
2420
2423
AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
2421
2424
visit_defaultness ( visitor, defaultness) ;
2422
- visitor. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
2425
+ visitor. visit_fn ( FnKind :: Fn ( sig, generics, body) , * span, * id) ;
2423
2426
}
2424
2427
AssocItemKind :: Type ( box TyAlias {
2425
2428
defaultness,
@@ -2460,7 +2463,7 @@ pub mod mut_visit {
2460
2463
body,
2461
2464
} ) => {
2462
2465
visitor. visit_qself ( qself) ;
2463
- visitor. visit_path ( prefix, id) ;
2466
+ visitor. visit_path ( prefix, * id) ;
2464
2467
if let Some ( suffixes) = suffixes {
2465
2468
for ( ident, rename) in suffixes {
2466
2469
visitor. visit_ident ( ident) ;
@@ -2474,6 +2477,8 @@ pub mod mut_visit {
2474
2477
}
2475
2478
}
2476
2479
}
2480
+ visit_lazy_tts ( visitor, tokens) ;
2481
+ visitor. visit_span ( span) ;
2477
2482
}
2478
2483
}
2479
2484
@@ -2494,32 +2499,33 @@ pub mod mut_visit {
2494
2499
visit_safety ( vis, safety) ;
2495
2500
}
2496
2501
2502
+ pub fn walk_item < K : WalkItemKind > ( visitor : & mut impl MutVisitor , item : & mut Item < K > ) {
2503
+ K :: walk ( item, visitor) ;
2504
+ }
2497
2505
/// Mutates one item, returning the item again.
2498
2506
pub fn walk_flat_map_item < K : WalkItemKind > (
2499
2507
visitor : & mut impl MutVisitor ,
2500
2508
mut item : P < Item < K > > ,
2501
2509
) -> SmallVec < [ P < Item < K > > ; 1 ] > {
2502
- let Item { ident, attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
2503
- visitor. visit_id ( id) ;
2504
- visit_attrs ( visitor, attrs) ;
2505
- visitor. visit_vis ( vis) ;
2506
- visitor. visit_ident ( ident) ;
2507
- kind. walk ( * span, * id, visitor) ;
2508
- visit_lazy_tts ( visitor, tokens) ;
2509
- visitor. visit_span ( span) ;
2510
+ walk_item ( visitor, item. deref_mut ( ) ) ;
2510
2511
smallvec ! [ item]
2511
2512
}
2512
2513
2513
2514
impl WalkItemKind for ForeignItemKind {
2514
- fn walk ( & mut self , span : Span , id : NodeId , visitor : & mut impl MutVisitor ) {
2515
- match self {
2515
+ fn walk ( item : & mut Item < Self > , visitor : & mut impl MutVisitor ) {
2516
+ let Item { attrs, id, span, vis, ident, kind, tokens } = item;
2517
+ visitor. visit_id ( id) ;
2518
+ visit_attrs ( visitor, attrs) ;
2519
+ visitor. visit_vis ( vis) ;
2520
+ visitor. visit_ident ( ident) ;
2521
+ match kind {
2516
2522
ForeignItemKind :: Static ( box StaticItem { ty, mutability : _, expr, safety : _ } ) => {
2517
2523
visitor. visit_ty ( ty) ;
2518
2524
visit_opt ( expr, |expr| visitor. visit_expr ( expr) ) ;
2519
2525
}
2520
2526
ForeignItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
2521
2527
visit_defaultness ( visitor, defaultness) ;
2522
- visitor. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
2528
+ visitor. visit_fn ( FnKind :: Fn ( sig, generics, body) , * span, * id) ;
2523
2529
}
2524
2530
ForeignItemKind :: TyAlias ( box TyAlias {
2525
2531
defaultness,
@@ -2536,6 +2542,8 @@ pub mod mut_visit {
2536
2542
}
2537
2543
ForeignItemKind :: MacCall ( mac) => visitor. visit_mac_call ( mac) ,
2538
2544
}
2545
+ visit_lazy_tts ( visitor, tokens) ;
2546
+ visitor. visit_span ( span) ;
2539
2547
}
2540
2548
}
2541
2549
0 commit comments