@@ -1788,8 +1788,8 @@ pub mod mut_visit {
17881788 }
17891789 }
17901790
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 ) ;
17931793 }
17941794
17951795 make_ast_visitor ! ( MutVisitor , mut ) ;
@@ -2279,69 +2279,65 @@ pub mod mut_visit {
22792279 }
22802280 }
22812281
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-
22912282 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 {
22942290 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 ) ,
22962292 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) ) ;
22992295 }
23002296 ItemKind :: Const ( item) => {
2301- visit_const_item ( item, vis ) ;
2297+ visit_const_item ( item, visitor ) ;
23022298 }
23032299 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) ;
23062302 }
23072303 ItemKind :: Mod ( safety, mod_kind) => {
2308- visit_safety ( vis , safety) ;
2304+ visit_safety ( visitor , safety) ;
23092305 match mod_kind {
23102306 ModKind :: Loaded (
23112307 items,
23122308 _inline,
23132309 ModSpans { inner_span, inject_use_span } ,
23142310 ) => {
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) ;
23182314 }
23192315 ModKind :: Unloaded => { }
23202316 }
23212317 }
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) ,
23242320 ItemKind :: TyAlias ( box TyAlias {
23252321 defaultness,
23262322 generics,
23272323 where_clauses,
23282324 bounds,
23292325 ty,
23302326 } ) => {
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) ;
23362332 }
23372333 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) ;
23402336 }
23412337 ItemKind :: Struct ( variant_data, generics)
23422338 | 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) ;
23452341 }
23462342 ItemKind :: Impl ( box Impl {
23472343 defaultness,
@@ -2353,27 +2349,27 @@ pub mod mut_visit {
23532349 self_ty,
23542350 items,
23552351 } ) => {
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 ) ) ;
23642360 }
23652361 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 ) ) ;
23702366 }
23712367 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 ) ;
23742370 }
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) ,
23772373 ItemKind :: Delegation ( box Delegation {
23782374 id,
23792375 qself,
@@ -2382,44 +2378,51 @@ pub mod mut_visit {
23822378 body,
23832379 from_glob : _,
23842380 } ) => {
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) ;
23882384 if let Some ( rename) = rename {
2389- vis . visit_ident ( rename) ;
2385+ visitor . visit_ident ( rename) ;
23902386 }
23912387 if let Some ( body) = body {
2392- vis . visit_block ( body) ;
2388+ visitor . visit_block ( body) ;
23932389 }
23942390 }
23952391 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) ;
23982394 if let Some ( suffixes) = suffixes {
23992395 for ( ident, rename) in suffixes {
2400- vis . visit_ident ( ident) ;
2396+ visitor . visit_ident ( ident) ;
24012397 if let Some ( rename) = rename {
2402- vis . visit_ident ( rename) ;
2398+ visitor . visit_ident ( rename) ;
24032399 }
24042400 }
24052401 }
24062402 if let Some ( body) = body {
2407- vis . visit_block ( body) ;
2403+ visitor . visit_block ( body) ;
24082404 }
24092405 }
24102406 }
2407+ visit_lazy_tts ( visitor, tokens) ;
2408+ visitor. visit_span ( span) ;
24112409 }
24122410 }
24132411
24142412 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 {
24172420 AssocItemKind :: Const ( item) => {
24182421 visit_const_item ( item, visitor) ;
24192422 }
24202423 AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
24212424 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) ;
24232426 }
24242427 AssocItemKind :: Type ( box TyAlias {
24252428 defaultness,
@@ -2460,7 +2463,7 @@ pub mod mut_visit {
24602463 body,
24612464 } ) => {
24622465 visitor. visit_qself ( qself) ;
2463- visitor. visit_path ( prefix, id) ;
2466+ visitor. visit_path ( prefix, * id) ;
24642467 if let Some ( suffixes) = suffixes {
24652468 for ( ident, rename) in suffixes {
24662469 visitor. visit_ident ( ident) ;
@@ -2474,6 +2477,8 @@ pub mod mut_visit {
24742477 }
24752478 }
24762479 }
2480+ visit_lazy_tts ( visitor, tokens) ;
2481+ visitor. visit_span ( span) ;
24772482 }
24782483 }
24792484
@@ -2494,32 +2499,33 @@ pub mod mut_visit {
24942499 visit_safety ( vis, safety) ;
24952500 }
24962501
2502+ pub fn walk_item < K : WalkItemKind > ( visitor : & mut impl MutVisitor , item : & mut Item < K > ) {
2503+ K :: walk ( item, visitor) ;
2504+ }
24972505 /// Mutates one item, returning the item again.
24982506 pub fn walk_flat_map_item < K : WalkItemKind > (
24992507 visitor : & mut impl MutVisitor ,
25002508 mut item : P < Item < K > > ,
25012509 ) -> 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 ( ) ) ;
25102511 smallvec ! [ item]
25112512 }
25122513
25132514 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 {
25162522 ForeignItemKind :: Static ( box StaticItem { ty, mutability : _, expr, safety : _ } ) => {
25172523 visitor. visit_ty ( ty) ;
25182524 visit_opt ( expr, |expr| visitor. visit_expr ( expr) ) ;
25192525 }
25202526 ForeignItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
25212527 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) ;
25232529 }
25242530 ForeignItemKind :: TyAlias ( box TyAlias {
25252531 defaultness,
@@ -2536,6 +2542,8 @@ pub mod mut_visit {
25362542 }
25372543 ForeignItemKind :: MacCall ( mac) => visitor. visit_mac_call ( mac) ,
25382544 }
2545+ visit_lazy_tts ( visitor, tokens) ;
2546+ visitor. visit_span ( span) ;
25392547 }
25402548 }
25412549
0 commit comments