@@ -36,7 +36,13 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
36
36
}
37
37
38
38
pub trait NoopVisitItemKind {
39
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , visitor : & mut impl MutVisitor ) ;
39
+ fn noop_visit (
40
+ & mut self ,
41
+ ctxt : Option < AssocCtxt > ,
42
+ span : Span ,
43
+ id : NodeId ,
44
+ visitor : & mut impl MutVisitor ,
45
+ ) ;
40
46
}
41
47
42
48
pub trait MutVisitor : Sized {
@@ -122,7 +128,8 @@ pub trait MutVisitor: Sized {
122
128
noop_visit_fn_decl ( d, self ) ;
123
129
}
124
130
125
- fn visit_fn ( & mut self , fk : FnKind < ' _ > ) {
131
+ /// `Span` and `NodeId` are mutated at the caller site.
132
+ fn visit_fn ( & mut self , fk : FnKind < ' _ > , _: Span , _: NodeId ) {
126
133
noop_visit_fn ( fk, self )
127
134
}
128
135
@@ -1078,12 +1085,23 @@ pub fn noop_visit_block<T: MutVisitor>(block: &mut P<Block>, vis: &mut T) {
1078
1085
vis. visit_span ( span) ;
1079
1086
}
1080
1087
1081
- pub fn noop_visit_item_kind ( kind : & mut impl NoopVisitItemKind , vis : & mut impl MutVisitor ) {
1082
- kind. noop_visit ( None , vis)
1088
+ pub fn noop_visit_item_kind (
1089
+ kind : & mut impl NoopVisitItemKind ,
1090
+ span : Span ,
1091
+ id : NodeId ,
1092
+ vis : & mut impl MutVisitor ,
1093
+ ) {
1094
+ kind. noop_visit ( None , span, id, vis)
1083
1095
}
1084
1096
1085
1097
impl NoopVisitItemKind for ItemKind {
1086
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , vis : & mut impl MutVisitor ) {
1098
+ fn noop_visit (
1099
+ & mut self ,
1100
+ ctxt : Option < AssocCtxt > ,
1101
+ span : Span ,
1102
+ id : NodeId ,
1103
+ vis : & mut impl MutVisitor ,
1104
+ ) {
1087
1105
assert_eq ! ( ctxt, None ) ;
1088
1106
match self {
1089
1107
ItemKind :: ExternCrate ( _orig_name) => { }
@@ -1097,7 +1115,7 @@ impl NoopVisitItemKind for ItemKind {
1097
1115
}
1098
1116
ItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1099
1117
visit_defaultness ( defaultness, vis) ;
1100
- vis. visit_fn ( FnKind :: Fn ( FnCtxt :: Free , sig, generics, body) ) ;
1118
+ vis. visit_fn ( FnKind :: Fn ( FnCtxt :: Free , sig, generics, body) , span , id ) ;
1101
1119
}
1102
1120
ItemKind :: Mod ( safety, mod_kind) => {
1103
1121
visit_safety ( safety, vis) ;
@@ -1196,15 +1214,21 @@ impl NoopVisitItemKind for ItemKind {
1196
1214
}
1197
1215
1198
1216
impl NoopVisitItemKind for AssocItemKind {
1199
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , visitor : & mut impl MutVisitor ) {
1217
+ fn noop_visit (
1218
+ & mut self ,
1219
+ ctxt : Option < AssocCtxt > ,
1220
+ span : Span ,
1221
+ id : NodeId ,
1222
+ visitor : & mut impl MutVisitor ,
1223
+ ) {
1200
1224
let ctxt = ctxt. unwrap ( ) ;
1201
1225
match self {
1202
1226
AssocItemKind :: Const ( item) => {
1203
1227
visit_const_item ( item, visitor) ;
1204
1228
}
1205
1229
AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1206
1230
visit_defaultness ( defaultness, visitor) ;
1207
- visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , sig, generics, body) ) ;
1231
+ visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , sig, generics, body) , span , id ) ;
1208
1232
}
1209
1233
AssocItemKind :: Type ( box TyAlias {
1210
1234
defaultness,
@@ -1284,7 +1308,7 @@ pub fn noop_visit_crate<T: MutVisitor>(krate: &mut Crate, vis: &mut T) {
1284
1308
vis. visit_span ( inject_use_span) ;
1285
1309
}
1286
1310
1287
- // Mutates one item into possibly many items .
1311
+ /// Mutates one item, returning the item again .
1288
1312
pub fn noop_flat_map_item < K : NoopVisitItemKind > (
1289
1313
mut item : P < Item < K > > ,
1290
1314
ctxt : Option < AssocCtxt > ,
@@ -1295,14 +1319,20 @@ pub fn noop_flat_map_item<K: NoopVisitItemKind>(
1295
1319
visit_attrs ( attrs, visitor) ;
1296
1320
visitor. visit_vis ( vis) ;
1297
1321
visitor. visit_ident ( ident) ;
1298
- kind. noop_visit ( ctxt, visitor) ;
1322
+ kind. noop_visit ( ctxt, * span , * id , visitor) ;
1299
1323
visit_lazy_tts ( tokens, visitor) ;
1300
1324
visitor. visit_span ( span) ;
1301
1325
smallvec ! [ item]
1302
1326
}
1303
1327
1304
1328
impl NoopVisitItemKind for ForeignItemKind {
1305
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , visitor : & mut impl MutVisitor ) {
1329
+ fn noop_visit (
1330
+ & mut self ,
1331
+ ctxt : Option < AssocCtxt > ,
1332
+ span : Span ,
1333
+ id : NodeId ,
1334
+ visitor : & mut impl MutVisitor ,
1335
+ ) {
1306
1336
assert_eq ! ( ctxt, None ) ;
1307
1337
match self {
1308
1338
ForeignItemKind :: Static ( box StaticItem { ty, mutability : _, expr, safety : _ } ) => {
@@ -1311,7 +1341,7 @@ impl NoopVisitItemKind for ForeignItemKind {
1311
1341
}
1312
1342
ForeignItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1313
1343
visit_defaultness ( defaultness, visitor) ;
1314
- visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Foreign , sig, generics, body) ) ;
1344
+ visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Foreign , sig, generics, body) , span , id ) ;
1315
1345
}
1316
1346
ForeignItemKind :: TyAlias ( box TyAlias {
1317
1347
defaultness,
@@ -1524,7 +1554,7 @@ pub fn noop_visit_expr<T: MutVisitor>(
1524
1554
visit_constness ( constness, vis) ;
1525
1555
coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
1526
1556
vis. visit_capture_by ( capture_clause) ;
1527
- vis. visit_fn ( FnKind :: Closure ( binder, fn_decl, body) ) ;
1557
+ vis. visit_fn ( FnKind :: Closure ( binder, fn_decl, body) , * span , * id ) ;
1528
1558
vis. visit_span ( fn_decl_span) ;
1529
1559
vis. visit_span ( fn_arg_span) ;
1530
1560
}
0 commit comments