@@ -301,7 +301,6 @@ macro_rules! make_ast_visitor {
301301 /// or `ControlFlow<T>`.
302302 type Result : VisitorResult = ( ) ;
303303
304- make_visit!{ AssocItem , ctxt: AssocCtxt ; visit_assoc_item, walk_assoc_item}
305304 make_visit!{ Stmt ; visit_stmt, walk_stmt}
306305
307306 /// This method is a hack to workaround unstable of `stmt_expr_attributes`.
@@ -372,9 +371,10 @@ macro_rules! make_ast_visitor {
372371 make_visit!{ P !( Pat ) ; visit_pat, walk_pat}
373372 make_visit!{ P !( Ty ) ; visit_ty, walk_ty}
374373
375- // Default implementations are generic over WalkItemKind
376- make_visit!{ ForeignItem ; visit_foreign_item, walk_item}
374+ // Item variants
377375 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}
378378
379379 fn visit_fn( & mut self , fn_kind: FnKind !( ) , _span: Span , _id: NodeId ) -> result!( ) {
380380 walk_fn( self , fn_kind)
@@ -1496,6 +1496,81 @@ macro_rules! make_ast_visitor {
14961496 return_result!( V )
14971497 }
14981498
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+
14991574 pub fn walk_fn<$( $lt, ) ? V : $trait$( <$lt>) ?>(
15001575 visitor: & mut V ,
15011576 kind: FnKind !( )
@@ -1626,73 +1701,6 @@ pub mod visit {
16261701
16271702 make_ast_visitor ! ( Visitor <' ast>) ;
16281703
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-
16961704 pub fn walk_stmt < ' a , V : Visitor < ' a > > ( visitor : & mut V , statement : & ' a Stmt ) -> V :: Result {
16971705 let Stmt { id : _, kind, span : _ } = statement;
16981706 match kind {
@@ -1960,11 +1968,6 @@ pub mod mut_visit {
19601968 exprs. flat_map_in_place ( |expr| vis. filter_map_expr ( expr) )
19611969 }
19621970
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-
19681971 // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
19691972 fn visit_delim_args < T : MutVisitor > ( vis : & mut T , args : & mut DelimArgs ) {
19701973 let DelimArgs { dspan, delim : _, tokens } = args;
@@ -2197,16 +2200,6 @@ pub mod mut_visit {
21972200 item. kind . walk ( item. id , item. span , & mut item. vis , & mut item. ident , vis)
21982201 }
21992202
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-
22102203 /// Mutates one item, returning the item again.
22112204 pub fn walk_flat_map_item (
22122205 vis : & mut impl MutVisitor ,
@@ -2226,77 +2219,11 @@ pub mod mut_visit {
22262219
22272220 /// Mutates one item, returning the item again.
22282221 pub fn walk_flat_map_assoc_item (
2229- visitor : & mut impl MutVisitor ,
2222+ vis : & mut impl MutVisitor ,
22302223 mut item : P < AssocItem > ,
22312224 ctxt : AssocCtxt ,
22322225 ) -> 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) ;
23002227 smallvec ! [ item]
23012228 }
23022229
0 commit comments