@@ -301,7 +301,6 @@ macro_rules! make_ast_visitor {
301
301
/// or `ControlFlow<T>`.
302
302
type Result : VisitorResult = ( ) ;
303
303
304
- make_visit!{ AssocItem , ctxt: AssocCtxt ; visit_assoc_item, walk_assoc_item}
305
304
make_visit!{ Stmt ; visit_stmt, walk_stmt}
306
305
307
306
/// This method is a hack to workaround unstable of `stmt_expr_attributes`.
@@ -372,9 +371,10 @@ macro_rules! make_ast_visitor {
372
371
make_visit!{ P !( Pat ) ; visit_pat, walk_pat}
373
372
make_visit!{ P !( Ty ) ; visit_ty, walk_ty}
374
373
375
- // Default implementations are generic over WalkItemKind
376
- make_visit!{ ForeignItem ; visit_foreign_item, walk_item}
374
+ // Item variants
377
375
make_visit!{ Item ; visit_item, walk_item}
376
+ make_visit!{ AssocItem , ctxt: AssocCtxt ; visit_assoc_item, walk_assoc_item}
377
+ make_visit!{ ForeignItem ; visit_foreign_item, walk_item}
378
378
379
379
fn visit_fn( & mut self , fn_kind: FnKind !( ) , _span: Span , _id: NodeId ) -> result!( ) {
380
380
walk_fn( self , fn_kind)
@@ -1496,6 +1496,81 @@ macro_rules! make_ast_visitor {
1496
1496
return_result!( V )
1497
1497
}
1498
1498
1499
+ pub fn walk_assoc_item<$( $lt, ) ? V : $trait$( <$lt>) ?>(
1500
+ visitor: & mut V ,
1501
+ item: ref_t!( Item <AssocItemKind >) ,
1502
+ ctxt: AssocCtxt
1503
+ ) -> result!( V ) {
1504
+ let Item { attrs, id, span, vis, ident, kind, tokens } = item;
1505
+ try_v!( visit_id!( visitor, id) ) ;
1506
+ visit_list!( visitor, visit_attribute, attrs) ;
1507
+ try_v!( visitor. visit_vis( vis) ) ;
1508
+ try_v!( visitor. visit_ident( ident) ) ;
1509
+ match kind {
1510
+ AssocItemKind :: Const ( box ConstItem { defaultness, generics, ty, expr } ) => {
1511
+ try_v!( visitor. visit_defaultness( defaultness) ) ;
1512
+ try_v!( visitor. visit_generics( generics) ) ;
1513
+ try_v!( visitor. visit_ty( ty) ) ;
1514
+ visit_o!( expr, |expr| visitor. visit_expr( expr) ) ;
1515
+ }
1516
+ AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1517
+ try_v!( visitor. visit_defaultness( defaultness) ) ;
1518
+ let kind =
1519
+ FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , ident, sig, vis, generics, body) ;
1520
+ try_v!( visitor. visit_fn( kind, * span, * id) ) ;
1521
+ }
1522
+ AssocItemKind :: Type ( box TyAlias {
1523
+ defaultness,
1524
+ generics,
1525
+ where_clauses,
1526
+ bounds,
1527
+ ty,
1528
+ } ) => {
1529
+ try_v!( visitor. visit_defaultness( defaultness) ) ;
1530
+ try_v!( visitor. visit_generics( generics) ) ;
1531
+ visit_list!( visitor, visit_param_bound, bounds; BoundKind :: Bound ) ;
1532
+ visit_o!( ty, |ty| visitor. visit_ty( ty) ) ;
1533
+ try_v!( visitor. visit_ty_alias_where_clauses( where_clauses) ) ;
1534
+ }
1535
+ AssocItemKind :: MacCall ( mac) => {
1536
+ try_v!( visitor. visit_mac_call( mac) ) ;
1537
+ }
1538
+ AssocItemKind :: Delegation ( box Delegation {
1539
+ id,
1540
+ qself,
1541
+ path,
1542
+ rename,
1543
+ body,
1544
+ from_glob: _,
1545
+ } ) => {
1546
+ try_v!( visit_id!( visitor, id) ) ;
1547
+ try_v!( visitor. visit_qself( qself) ) ;
1548
+ try_v!( visitor. visit_path( path, * id) ) ;
1549
+ visit_o!( rename, |rename| visitor. visit_ident( rename) ) ;
1550
+ visit_o!( body, |body| visitor. visit_block( body) ) ;
1551
+ }
1552
+ AssocItemKind :: DelegationMac ( box DelegationMac {
1553
+ qself,
1554
+ prefix,
1555
+ suffixes,
1556
+ body,
1557
+ } ) => {
1558
+ try_v!( visitor. visit_qself( qself) ) ;
1559
+ try_v!( visitor. visit_path( prefix, * id) ) ;
1560
+ if let Some ( suffixes) = suffixes {
1561
+ for ( ident, rename) in suffixes {
1562
+ try_v!( visitor. visit_ident( ident) ) ;
1563
+ visit_o!( rename, |rename| visitor. visit_ident( rename) ) ;
1564
+ }
1565
+ }
1566
+ visit_o!( body, |body| visitor. visit_block( body) ) ;
1567
+ }
1568
+ }
1569
+ visit_lazy_tts!( visitor, tokens) ;
1570
+ try_v!( visit_span!( visitor, span) ) ;
1571
+ return_result!( V )
1572
+ }
1573
+
1499
1574
pub fn walk_fn<$( $lt, ) ? V : $trait$( <$lt>) ?>(
1500
1575
visitor: & mut V ,
1501
1576
kind: FnKind !( )
@@ -1626,73 +1701,6 @@ pub mod visit {
1626
1701
1627
1702
make_ast_visitor ! ( Visitor <' ast>) ;
1628
1703
1629
- pub fn walk_assoc_item < ' a , V : Visitor < ' a > > (
1630
- visitor : & mut V ,
1631
- item : & ' a AssocItem ,
1632
- ctxt : AssocCtxt ,
1633
- ) -> V :: Result {
1634
- let Item { id, span, ident, vis, attrs, kind, tokens : _ } = item;
1635
- walk_list ! ( visitor, visit_attribute, attrs) ;
1636
- try_visit ! ( visitor. visit_vis( vis) ) ;
1637
- try_visit ! ( visitor. visit_ident( ident) ) ;
1638
- match kind {
1639
- AssocItemKind :: Const ( box ConstItem { defaultness, generics, ty, expr } ) => {
1640
- try_visit ! ( visitor. visit_defaultness( defaultness) ) ;
1641
- try_visit ! ( visitor. visit_generics( generics) ) ;
1642
- try_visit ! ( visitor. visit_ty( ty) ) ;
1643
- visit_opt ! ( visitor, visit_expr, expr) ;
1644
- }
1645
- AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1646
- try_visit ! ( visitor. visit_defaultness( defaultness) ) ;
1647
- let kind = FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , ident, sig, vis, generics, body) ;
1648
- try_visit ! ( visitor. visit_fn( kind, * span, * id) ) ;
1649
- }
1650
- AssocItemKind :: Type ( box TyAlias {
1651
- generics,
1652
- bounds,
1653
- ty,
1654
- defaultness,
1655
- where_clauses,
1656
- } ) => {
1657
- try_visit ! ( visitor. visit_defaultness( defaultness) ) ;
1658
- try_visit ! ( visitor. visit_generics( generics) ) ;
1659
- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: Bound ) ;
1660
- visit_opt ! ( visitor, visit_ty, ty) ;
1661
- try_visit ! ( visitor. visit_ty_alias_where_clauses( where_clauses) ) ;
1662
- }
1663
- AssocItemKind :: MacCall ( mac) => {
1664
- try_visit ! ( visitor. visit_mac_call( mac) ) ;
1665
- }
1666
- AssocItemKind :: Delegation ( box Delegation {
1667
- id,
1668
- qself,
1669
- path,
1670
- rename,
1671
- body,
1672
- from_glob : _,
1673
- } ) => {
1674
- try_visit ! ( visitor. visit_qself( qself) ) ;
1675
- try_visit ! ( visitor. visit_path( path, * id) ) ;
1676
- visit_opt ! ( visitor, visit_ident, rename) ;
1677
- visit_opt ! ( visitor, visit_block, body) ;
1678
- }
1679
- AssocItemKind :: DelegationMac ( box DelegationMac { qself, prefix, suffixes, body } ) => {
1680
- try_visit ! ( visitor. visit_qself( qself) ) ;
1681
- try_visit ! ( visitor. visit_path( prefix, * id) ) ;
1682
- if let Some ( suffixes) = suffixes {
1683
- for ( ident, rename) in suffixes {
1684
- visitor. visit_ident ( ident) ;
1685
- if let Some ( rename) = rename {
1686
- visitor. visit_ident ( rename) ;
1687
- }
1688
- }
1689
- }
1690
- visit_opt ! ( visitor, visit_block, body) ;
1691
- }
1692
- }
1693
- V :: Result :: output ( )
1694
- }
1695
-
1696
1704
pub fn walk_stmt < ' a , V : Visitor < ' a > > ( visitor : & mut V , statement : & ' a Stmt ) -> V :: Result {
1697
1705
let Stmt { id : _, kind, span : _ } = statement;
1698
1706
match kind {
@@ -1960,11 +1968,6 @@ pub mod mut_visit {
1960
1968
exprs. flat_map_in_place ( |expr| vis. filter_map_expr ( expr) )
1961
1969
}
1962
1970
1963
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
1964
- fn visit_bounds < T : MutVisitor > ( vis : & mut T , bounds : & mut GenericBounds , ctxt : BoundKind ) {
1965
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, ctxt) ) ;
1966
- }
1967
-
1968
1971
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
1969
1972
fn visit_delim_args < T : MutVisitor > ( vis : & mut T , args : & mut DelimArgs ) {
1970
1973
let DelimArgs { dspan, delim : _, tokens } = args;
@@ -2197,16 +2200,6 @@ pub mod mut_visit {
2197
2200
item. kind . walk ( item. id , item. span , & mut item. vis , & mut item. ident , vis)
2198
2201
}
2199
2202
2200
- fn visit_const_item < T : MutVisitor > (
2201
- ConstItem { defaultness, generics, ty, expr } : & mut ConstItem ,
2202
- visitor : & mut T ,
2203
- ) {
2204
- visitor. visit_defaultness ( defaultness) ;
2205
- visitor. visit_generics ( generics) ;
2206
- visitor. visit_ty ( ty) ;
2207
- visit_opt ( expr, |expr| visitor. visit_expr ( expr) ) ;
2208
- }
2209
-
2210
2203
/// Mutates one item, returning the item again.
2211
2204
pub fn walk_flat_map_item (
2212
2205
vis : & mut impl MutVisitor ,
@@ -2226,77 +2219,11 @@ pub mod mut_visit {
2226
2219
2227
2220
/// Mutates one item, returning the item again.
2228
2221
pub fn walk_flat_map_assoc_item (
2229
- visitor : & mut impl MutVisitor ,
2222
+ vis : & mut impl MutVisitor ,
2230
2223
mut item : P < AssocItem > ,
2231
2224
ctxt : AssocCtxt ,
2232
2225
) -> SmallVec < [ P < AssocItem > ; 1 ] > {
2233
- let Item { ident, attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
2234
- visitor. visit_id ( id) ;
2235
- visit_attrs ( visitor, attrs) ;
2236
- visitor. visit_vis ( vis) ;
2237
- visitor. visit_ident ( ident) ;
2238
- match kind {
2239
- AssocItemKind :: Const ( item) => {
2240
- visit_const_item ( item, visitor) ;
2241
- }
2242
- AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
2243
- visitor. visit_defaultness ( defaultness) ;
2244
- visitor. visit_fn (
2245
- FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , ident, sig, vis, generics, body) ,
2246
- * span,
2247
- * id,
2248
- ) ;
2249
- }
2250
- AssocItemKind :: Type ( box TyAlias {
2251
- defaultness,
2252
- generics,
2253
- where_clauses,
2254
- bounds,
2255
- ty,
2256
- } ) => {
2257
- visitor. visit_defaultness ( defaultness) ;
2258
- visitor. visit_generics ( generics) ;
2259
- visit_bounds ( visitor, bounds, BoundKind :: Bound ) ;
2260
- visit_opt ( ty, |ty| visitor. visit_ty ( ty) ) ;
2261
- visitor. visit_ty_alias_where_clauses ( where_clauses) ;
2262
- }
2263
- AssocItemKind :: MacCall ( mac) => visitor. visit_mac_call ( mac) ,
2264
- AssocItemKind :: Delegation ( box Delegation {
2265
- id,
2266
- qself,
2267
- path,
2268
- rename,
2269
- body,
2270
- from_glob : _,
2271
- } ) => {
2272
- visitor. visit_id ( id) ;
2273
- visitor. visit_qself ( qself) ;
2274
- visitor. visit_path ( path, * id) ;
2275
- if let Some ( rename) = rename {
2276
- visitor. visit_ident ( rename) ;
2277
- }
2278
- if let Some ( body) = body {
2279
- visitor. visit_block ( body) ;
2280
- }
2281
- }
2282
- AssocItemKind :: DelegationMac ( box DelegationMac { qself, prefix, suffixes, body } ) => {
2283
- visitor. visit_qself ( qself) ;
2284
- visitor. visit_path ( prefix, * id) ;
2285
- if let Some ( suffixes) = suffixes {
2286
- for ( ident, rename) in suffixes {
2287
- visitor. visit_ident ( ident) ;
2288
- if let Some ( rename) = rename {
2289
- visitor. visit_ident ( rename) ;
2290
- }
2291
- }
2292
- }
2293
- if let Some ( body) = body {
2294
- visitor. visit_block ( body) ;
2295
- }
2296
- }
2297
- }
2298
- visit_lazy_tts ( visitor, tokens) ;
2299
- visitor. visit_span ( span) ;
2226
+ vis. visit_assoc_item ( & mut item, ctxt) ;
2300
2227
smallvec ! [ item]
2301
2228
}
2302
2229
0 commit comments