@@ -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
@@ -1089,12 +1096,23 @@ pub fn noop_visit_block<T: MutVisitor>(block: &mut P<Block>, vis: &mut T) {
1089
1096
vis. visit_span ( span) ;
1090
1097
}
1091
1098
1092
- pub fn noop_visit_item_kind ( kind : & mut impl NoopVisitItemKind , vis : & mut impl MutVisitor ) {
1093
- kind. noop_visit ( None , vis)
1099
+ pub fn noop_visit_item_kind (
1100
+ kind : & mut impl NoopVisitItemKind ,
1101
+ span : Span ,
1102
+ id : NodeId ,
1103
+ vis : & mut impl MutVisitor ,
1104
+ ) {
1105
+ kind. noop_visit ( None , span, id, vis)
1094
1106
}
1095
1107
1096
1108
impl NoopVisitItemKind for ItemKind {
1097
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , vis : & mut impl MutVisitor ) {
1109
+ fn noop_visit (
1110
+ & mut self ,
1111
+ ctxt : Option < AssocCtxt > ,
1112
+ span : Span ,
1113
+ id : NodeId ,
1114
+ vis : & mut impl MutVisitor ,
1115
+ ) {
1098
1116
assert_eq ! ( ctxt, None ) ;
1099
1117
match self {
1100
1118
ItemKind :: ExternCrate ( _orig_name) => { }
@@ -1108,7 +1126,7 @@ impl NoopVisitItemKind for ItemKind {
1108
1126
}
1109
1127
ItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1110
1128
visit_defaultness ( defaultness, vis) ;
1111
- vis. visit_fn ( FnKind :: Fn ( FnCtxt :: Free , sig, generics, body) ) ;
1129
+ vis. visit_fn ( FnKind :: Fn ( FnCtxt :: Free , sig, generics, body) , span , id ) ;
1112
1130
}
1113
1131
ItemKind :: Mod ( safety, mod_kind) => {
1114
1132
visit_safety ( safety, vis) ;
@@ -1207,15 +1225,21 @@ impl NoopVisitItemKind for ItemKind {
1207
1225
}
1208
1226
1209
1227
impl NoopVisitItemKind for AssocItemKind {
1210
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , visitor : & mut impl MutVisitor ) {
1228
+ fn noop_visit (
1229
+ & mut self ,
1230
+ ctxt : Option < AssocCtxt > ,
1231
+ span : Span ,
1232
+ id : NodeId ,
1233
+ visitor : & mut impl MutVisitor ,
1234
+ ) {
1211
1235
let ctxt = ctxt. unwrap ( ) ;
1212
1236
match self {
1213
1237
AssocItemKind :: Const ( item) => {
1214
1238
visit_const_item ( item, visitor) ;
1215
1239
}
1216
1240
AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1217
1241
visit_defaultness ( defaultness, visitor) ;
1218
- visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , sig, generics, body) ) ;
1242
+ visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , sig, generics, body) , span , id ) ;
1219
1243
}
1220
1244
AssocItemKind :: Type ( box TyAlias {
1221
1245
defaultness,
@@ -1295,7 +1319,7 @@ pub fn noop_visit_crate<T: MutVisitor>(krate: &mut Crate, vis: &mut T) {
1295
1319
vis. visit_span ( inject_use_span) ;
1296
1320
}
1297
1321
1298
- // Mutates one item into possibly many items .
1322
+ /// Mutates one item, returning the item again .
1299
1323
pub fn noop_flat_map_item < K : NoopVisitItemKind > (
1300
1324
mut item : P < Item < K > > ,
1301
1325
ctxt : Option < AssocCtxt > ,
@@ -1306,14 +1330,20 @@ pub fn noop_flat_map_item<K: NoopVisitItemKind>(
1306
1330
visit_attrs ( attrs, visitor) ;
1307
1331
visitor. visit_vis ( vis) ;
1308
1332
visitor. visit_ident ( ident) ;
1309
- kind. noop_visit ( ctxt, visitor) ;
1333
+ kind. noop_visit ( ctxt, * span , * id , visitor) ;
1310
1334
visit_lazy_tts ( tokens, visitor) ;
1311
1335
visitor. visit_span ( span) ;
1312
1336
smallvec ! [ item]
1313
1337
}
1314
1338
1315
1339
impl NoopVisitItemKind for ForeignItemKind {
1316
- fn noop_visit ( & mut self , ctxt : Option < AssocCtxt > , visitor : & mut impl MutVisitor ) {
1340
+ fn noop_visit (
1341
+ & mut self ,
1342
+ ctxt : Option < AssocCtxt > ,
1343
+ span : Span ,
1344
+ id : NodeId ,
1345
+ visitor : & mut impl MutVisitor ,
1346
+ ) {
1317
1347
assert_eq ! ( ctxt, None ) ;
1318
1348
match self {
1319
1349
ForeignItemKind :: Static ( box StaticItem { ty, mutability : _, expr, safety : _ } ) => {
@@ -1322,7 +1352,7 @@ impl NoopVisitItemKind for ForeignItemKind {
1322
1352
}
1323
1353
ForeignItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1324
1354
visit_defaultness ( defaultness, visitor) ;
1325
- visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Foreign , sig, generics, body) ) ;
1355
+ visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Foreign , sig, generics, body) , span , id ) ;
1326
1356
}
1327
1357
ForeignItemKind :: TyAlias ( box TyAlias {
1328
1358
defaultness,
@@ -1535,7 +1565,7 @@ pub fn noop_visit_expr<T: MutVisitor>(
1535
1565
visit_constness ( constness, vis) ;
1536
1566
coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
1537
1567
vis. visit_capture_by ( capture_clause) ;
1538
- vis. visit_fn ( FnKind :: Closure ( binder, fn_decl, body) ) ;
1568
+ vis. visit_fn ( FnKind :: Closure ( binder, fn_decl, body) , * span , * id ) ;
1539
1569
vis. visit_span ( fn_decl_span) ;
1540
1570
vis. visit_span ( fn_arg_span) ;
1541
1571
}
0 commit comments