Skip to content

Commit 545553c

Browse files
committed
Pass id and span to visit_fn, just like for the immutable visitor
1 parent 1b9ac00 commit 545553c

File tree

2 files changed

+47
-17
lines changed

2 files changed

+47
-17
lines changed

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
3636
}
3737

3838
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+
);
4046
}
4147

4248
pub trait MutVisitor: Sized {
@@ -122,7 +128,8 @@ pub trait MutVisitor: Sized {
122128
noop_visit_fn_decl(d, self);
123129
}
124130

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) {
126133
noop_visit_fn(fk, self)
127134
}
128135

@@ -1078,12 +1085,23 @@ pub fn noop_visit_block<T: MutVisitor>(block: &mut P<Block>, vis: &mut T) {
10781085
vis.visit_span(span);
10791086
}
10801087

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)
10831095
}
10841096

10851097
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+
) {
10871105
assert_eq!(ctxt, None);
10881106
match self {
10891107
ItemKind::ExternCrate(_orig_name) => {}
@@ -1097,7 +1115,7 @@ impl NoopVisitItemKind for ItemKind {
10971115
}
10981116
ItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
10991117
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);
11011119
}
11021120
ItemKind::Mod(safety, mod_kind) => {
11031121
visit_safety(safety, vis);
@@ -1196,15 +1214,21 @@ impl NoopVisitItemKind for ItemKind {
11961214
}
11971215

11981216
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+
) {
12001224
let ctxt = ctxt.unwrap();
12011225
match self {
12021226
AssocItemKind::Const(item) => {
12031227
visit_const_item(item, visitor);
12041228
}
12051229
AssocItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
12061230
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);
12081232
}
12091233
AssocItemKind::Type(box TyAlias {
12101234
defaultness,
@@ -1284,7 +1308,7 @@ pub fn noop_visit_crate<T: MutVisitor>(krate: &mut Crate, vis: &mut T) {
12841308
vis.visit_span(inject_use_span);
12851309
}
12861310

1287-
// Mutates one item into possibly many items.
1311+
/// Mutates one item, returning the item again.
12881312
pub fn noop_flat_map_item<K: NoopVisitItemKind>(
12891313
mut item: P<Item<K>>,
12901314
ctxt: Option<AssocCtxt>,
@@ -1295,14 +1319,20 @@ pub fn noop_flat_map_item<K: NoopVisitItemKind>(
12951319
visit_attrs(attrs, visitor);
12961320
visitor.visit_vis(vis);
12971321
visitor.visit_ident(ident);
1298-
kind.noop_visit(ctxt, visitor);
1322+
kind.noop_visit(ctxt, *span, *id, visitor);
12991323
visit_lazy_tts(tokens, visitor);
13001324
visitor.visit_span(span);
13011325
smallvec![item]
13021326
}
13031327

13041328
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+
) {
13061336
assert_eq!(ctxt, None);
13071337
match self {
13081338
ForeignItemKind::Static(box StaticItem { ty, mutability: _, expr, safety: _ }) => {
@@ -1311,7 +1341,7 @@ impl NoopVisitItemKind for ForeignItemKind {
13111341
}
13121342
ForeignItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
13131343
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);
13151345
}
13161346
ForeignItemKind::TyAlias(box TyAlias {
13171347
defaultness,
@@ -1524,7 +1554,7 @@ pub fn noop_visit_expr<T: MutVisitor>(
15241554
visit_constness(constness, vis);
15251555
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
15261556
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);
15281558
vis.visit_span(fn_decl_span);
15291559
vis.visit_span(fn_arg_span);
15301560
}

compiler/rustc_builtin_macros/src/test_harness.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
129129
c.items.push(mk_main(&mut self.cx));
130130
}
131131

132-
fn flat_map_item(&mut self, i: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
133-
let mut item = i.into_inner();
132+
fn flat_map_item(&mut self, mut i: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
133+
let item = &mut *i;
134134
if let Some(name) = get_test_name(&item) {
135135
debug!("this is a test item");
136136

@@ -144,13 +144,13 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
144144
item.kind
145145
{
146146
let prev_tests = mem::take(&mut self.tests);
147-
noop_visit_item_kind(&mut item.kind, self);
147+
noop_visit_item_kind(&mut item.kind, item.span, item.id, self);
148148
self.add_test_cases(item.id, span, prev_tests);
149149
} else {
150150
// But in those cases, we emit a lint to warn the user of these missing tests.
151151
walk_item(&mut InnerItemLinter { sess: self.cx.ext_cx.sess }, &item);
152152
}
153-
smallvec![P(item)]
153+
smallvec![i]
154154
}
155155
}
156156

0 commit comments

Comments
 (0)