Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6b47c6d

Browse files
authoredNov 16, 2024
Rollup merge of #132787 - maxcabrajac:fnctxt, r=petrochenkov
Unify FnKind between AST visitors and make WalkItemKind more straight forward Unifying `FnKind` requires a bunch of changes to `WalkItemKind::walk` signature so I'll change them in one go related to #128974 r? `@petrochenkov`
2 parents eff2b70 + 516a3b0 commit 6b47c6d

File tree

10 files changed

+157
-88
lines changed

10 files changed

+157
-88
lines changed
 

‎compiler/rustc_ast/src/mut_visit.rs

Lines changed: 92 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crate::ast::*;
2323
use crate::ptr::P;
2424
use crate::token::{self, Token};
2525
use crate::tokenstream::*;
26-
use crate::visit::{AssocCtxt, BoundKind};
26+
use crate::visit::{AssocCtxt, BoundKind, FnCtxt};
2727

2828
pub trait ExpectOne<A: Array> {
2929
fn expect_one(self, err: &'static str) -> A::Item;
@@ -37,7 +37,16 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
3737
}
3838

3939
pub trait WalkItemKind {
40-
fn walk(&mut self, span: Span, id: NodeId, visitor: &mut impl MutVisitor);
40+
type Ctxt;
41+
fn walk(
42+
&mut self,
43+
span: Span,
44+
id: NodeId,
45+
ident: &mut Ident,
46+
visibility: &mut Visibility,
47+
ctxt: Self::Ctxt,
48+
visitor: &mut impl MutVisitor,
49+
);
4150
}
4251

4352
pub trait MutVisitor: Sized {
@@ -114,9 +123,9 @@ pub trait MutVisitor: Sized {
114123
fn flat_map_assoc_item(
115124
&mut self,
116125
i: P<AssocItem>,
117-
_ctxt: AssocCtxt,
126+
ctxt: AssocCtxt,
118127
) -> SmallVec<[P<AssocItem>; 1]> {
119-
walk_flat_map_item(self, i)
128+
walk_flat_map_assoc_item(self, i, ctxt)
120129
}
121130

122131
fn visit_fn_decl(&mut self, d: &mut P<FnDecl>) {
@@ -880,7 +889,7 @@ fn walk_coroutine_kind<T: MutVisitor>(vis: &mut T, coroutine_kind: &mut Coroutin
880889

881890
fn walk_fn<T: MutVisitor>(vis: &mut T, kind: FnKind<'_>) {
882891
match kind {
883-
FnKind::Fn(FnSig { header, decl, span }, generics, body) => {
892+
FnKind::Fn(_ctxt, _ident, FnSig { header, decl, span }, _visibility, generics, body) => {
884893
// Identifier and visibility are visited as a part of the item.
885894
vis.visit_fn_header(header);
886895
vis.visit_generics(generics);
@@ -890,8 +899,9 @@ fn walk_fn<T: MutVisitor>(vis: &mut T, kind: FnKind<'_>) {
890899
}
891900
vis.visit_span(span);
892901
}
893-
FnKind::Closure(binder, decl, body) => {
902+
FnKind::Closure(binder, coroutine_kind, decl, body) => {
894903
vis.visit_closure_binder(binder);
904+
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
895905
vis.visit_fn_decl(decl);
896906
vis.visit_expr(body);
897907
}
@@ -1079,17 +1089,29 @@ pub fn walk_block<T: MutVisitor>(vis: &mut T, block: &mut P<Block>) {
10791089
vis.visit_span(span);
10801090
}
10811091

1082-
pub fn walk_item_kind(
1083-
kind: &mut impl WalkItemKind,
1092+
pub fn walk_item_kind<K: WalkItemKind>(
1093+
kind: &mut K,
10841094
span: Span,
10851095
id: NodeId,
1096+
ident: &mut Ident,
1097+
visibility: &mut Visibility,
1098+
ctxt: K::Ctxt,
10861099
vis: &mut impl MutVisitor,
10871100
) {
1088-
kind.walk(span, id, vis)
1101+
kind.walk(span, id, ident, visibility, ctxt, vis)
10891102
}
10901103

10911104
impl WalkItemKind for ItemKind {
1092-
fn walk(&mut self, span: Span, id: NodeId, vis: &mut impl MutVisitor) {
1105+
type Ctxt = ();
1106+
fn walk(
1107+
&mut self,
1108+
span: Span,
1109+
id: NodeId,
1110+
ident: &mut Ident,
1111+
visibility: &mut Visibility,
1112+
_ctxt: Self::Ctxt,
1113+
vis: &mut impl MutVisitor,
1114+
) {
10931115
match self {
10941116
ItemKind::ExternCrate(_orig_name) => {}
10951117
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree),
@@ -1102,7 +1124,11 @@ impl WalkItemKind for ItemKind {
11021124
}
11031125
ItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
11041126
visit_defaultness(vis, defaultness);
1105-
vis.visit_fn(FnKind::Fn(sig, generics, body), span, id);
1127+
vis.visit_fn(
1128+
FnKind::Fn(FnCtxt::Free, ident, sig, visibility, generics, body),
1129+
span,
1130+
id,
1131+
);
11061132
}
11071133
ItemKind::Mod(safety, mod_kind) => {
11081134
visit_safety(vis, safety);
@@ -1201,14 +1227,27 @@ impl WalkItemKind for ItemKind {
12011227
}
12021228

12031229
impl WalkItemKind for AssocItemKind {
1204-
fn walk(&mut self, span: Span, id: NodeId, visitor: &mut impl MutVisitor) {
1230+
type Ctxt = AssocCtxt;
1231+
fn walk(
1232+
&mut self,
1233+
span: Span,
1234+
id: NodeId,
1235+
ident: &mut Ident,
1236+
visibility: &mut Visibility,
1237+
ctxt: Self::Ctxt,
1238+
visitor: &mut impl MutVisitor,
1239+
) {
12051240
match self {
12061241
AssocItemKind::Const(item) => {
12071242
visit_const_item(item, visitor);
12081243
}
12091244
AssocItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
12101245
visit_defaultness(visitor, defaultness);
1211-
visitor.visit_fn(FnKind::Fn(sig, generics, body), span, id);
1246+
visitor.visit_fn(
1247+
FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, visibility, generics, body),
1248+
span,
1249+
id,
1250+
);
12121251
}
12131252
AssocItemKind::Type(box TyAlias {
12141253
defaultness,
@@ -1288,32 +1327,52 @@ pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
12881327
vis.visit_span(inject_use_span);
12891328
}
12901329

1291-
/// Mutates one item, returning the item again.
1292-
pub fn walk_flat_map_item<K: WalkItemKind>(
1330+
pub fn walk_flat_map_item<K: WalkItemKind<Ctxt = ()>>(
1331+
visitor: &mut impl MutVisitor,
1332+
item: P<Item<K>>,
1333+
) -> SmallVec<[P<Item<K>>; 1]> {
1334+
walk_flat_map_assoc_item(visitor, item, ())
1335+
}
1336+
1337+
pub fn walk_flat_map_assoc_item<K: WalkItemKind>(
12931338
visitor: &mut impl MutVisitor,
12941339
mut item: P<Item<K>>,
1340+
ctxt: K::Ctxt,
12951341
) -> SmallVec<[P<Item<K>>; 1]> {
12961342
let Item { ident, attrs, id, kind, vis, span, tokens } = item.deref_mut();
12971343
visitor.visit_id(id);
12981344
visit_attrs(visitor, attrs);
12991345
visitor.visit_vis(vis);
13001346
visitor.visit_ident(ident);
1301-
kind.walk(*span, *id, visitor);
1347+
kind.walk(*span, *id, ident, vis, ctxt, visitor);
13021348
visit_lazy_tts(visitor, tokens);
13031349
visitor.visit_span(span);
13041350
smallvec![item]
13051351
}
13061352

13071353
impl WalkItemKind for ForeignItemKind {
1308-
fn walk(&mut self, span: Span, id: NodeId, visitor: &mut impl MutVisitor) {
1354+
type Ctxt = ();
1355+
fn walk(
1356+
&mut self,
1357+
span: Span,
1358+
id: NodeId,
1359+
ident: &mut Ident,
1360+
visibility: &mut Visibility,
1361+
_ctxt: Self::Ctxt,
1362+
visitor: &mut impl MutVisitor,
1363+
) {
13091364
match self {
13101365
ForeignItemKind::Static(box StaticItem { ty, mutability: _, expr, safety: _ }) => {
13111366
visitor.visit_ty(ty);
13121367
visit_opt(expr, |expr| visitor.visit_expr(expr));
13131368
}
13141369
ForeignItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
13151370
visit_defaultness(visitor, defaultness);
1316-
visitor.visit_fn(FnKind::Fn(sig, generics, body), span, id);
1371+
visitor.visit_fn(
1372+
FnKind::Fn(FnCtxt::Foreign, ident, sig, visibility, generics, body),
1373+
span,
1374+
id,
1375+
);
13171376
}
13181377
ForeignItemKind::TyAlias(box TyAlias {
13191378
defaultness,
@@ -1522,9 +1581,8 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
15221581
fn_arg_span,
15231582
}) => {
15241583
visit_constness(vis, constness);
1525-
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
15261584
vis.visit_capture_by(capture_clause);
1527-
vis.visit_fn(FnKind::Closure(binder, fn_decl, body), *span, *id);
1585+
vis.visit_fn(FnKind::Closure(binder, coroutine_kind, fn_decl, body), *span, *id);
15281586
vis.visit_span(fn_decl_span);
15291587
vis.visit_span(fn_arg_span);
15301588
}
@@ -1785,8 +1843,20 @@ impl<N: DummyAstNode, T: DummyAstNode> DummyAstNode for crate::ast_traits::AstNo
17851843
#[derive(Debug)]
17861844
pub enum FnKind<'a> {
17871845
/// E.g., `fn foo()`, `fn foo(&self)`, or `extern "Abi" fn foo()`.
1788-
Fn(&'a mut FnSig, &'a mut Generics, &'a mut Option<P<Block>>),
1846+
Fn(
1847+
FnCtxt,
1848+
&'a mut Ident,
1849+
&'a mut FnSig,
1850+
&'a mut Visibility,
1851+
&'a mut Generics,
1852+
&'a mut Option<P<Block>>,
1853+
),
17891854

17901855
/// E.g., `|x, y| body`.
1791-
Closure(&'a mut ClosureBinder, &'a mut P<FnDecl>, &'a mut P<Expr>),
1856+
Closure(
1857+
&'a mut ClosureBinder,
1858+
&'a mut Option<CoroutineKind>,
1859+
&'a mut P<FnDecl>,
1860+
&'a mut P<Expr>,
1861+
),
17921862
}

‎compiler/rustc_ast/src/visit.rs

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ impl BoundKind {
6666
#[derive(Copy, Clone, Debug)]
6767
pub enum FnKind<'a> {
6868
/// E.g., `fn foo()`, `fn foo(&self)`, or `extern "Abi" fn foo()`.
69-
Fn(FnCtxt, Ident, &'a FnSig, &'a Visibility, &'a Generics, Option<&'a Block>),
69+
Fn(FnCtxt, &'a Ident, &'a FnSig, &'a Visibility, &'a Generics, &'a Option<P<Block>>),
7070

7171
/// E.g., `|x, y| body`.
7272
Closure(&'a ClosureBinder, &'a Option<CoroutineKind>, &'a FnDecl, &'a Expr),
@@ -112,11 +112,15 @@ pub enum LifetimeCtxt {
112112
GenericArg,
113113
}
114114

115-
pub trait WalkItemKind: Sized {
115+
pub trait WalkItemKind {
116+
type Ctxt;
116117
fn walk<'a, V: Visitor<'a>>(
117118
&'a self,
118-
item: &'a Item<Self>,
119-
ctxt: AssocCtxt,
119+
span: Span,
120+
id: NodeId,
121+
ident: &'a Ident,
122+
visibility: &'a Visibility,
123+
ctxt: Self::Ctxt,
120124
visitor: &mut V,
121125
) -> V::Result;
122126
}
@@ -340,16 +344,19 @@ pub fn walk_trait_ref<'a, V: Visitor<'a>>(visitor: &mut V, trait_ref: &'a TraitR
340344
}
341345

342346
impl WalkItemKind for ItemKind {
347+
type Ctxt = ();
343348
fn walk<'a, V: Visitor<'a>>(
344349
&'a self,
345-
item: &'a Item<Self>,
346-
_ctxt: AssocCtxt,
350+
span: Span,
351+
id: NodeId,
352+
ident: &'a Ident,
353+
vis: &'a Visibility,
354+
_ctxt: Self::Ctxt,
347355
visitor: &mut V,
348356
) -> V::Result {
349-
let Item { id, span, vis, ident, .. } = item;
350357
match self {
351358
ItemKind::ExternCrate(_rename) => {}
352-
ItemKind::Use(use_tree) => try_visit!(visitor.visit_use_tree(use_tree, *id, false)),
359+
ItemKind::Use(use_tree) => try_visit!(visitor.visit_use_tree(use_tree, id, false)),
353360
ItemKind::Static(box StaticItem { ty, safety: _, mutability: _, expr }) => {
354361
try_visit!(visitor.visit_ty(ty));
355362
visit_opt!(visitor, visit_expr, expr);
@@ -360,8 +367,8 @@ impl WalkItemKind for ItemKind {
360367
visit_opt!(visitor, visit_expr, expr);
361368
}
362369
ItemKind::Fn(box Fn { defaultness: _, generics, sig, body }) => {
363-
let kind = FnKind::Fn(FnCtxt::Free, *ident, sig, vis, generics, body.as_deref());
364-
try_visit!(visitor.visit_fn(kind, *span, *id));
370+
let kind = FnKind::Fn(FnCtxt::Free, ident, sig, vis, generics, body);
371+
try_visit!(visitor.visit_fn(kind, span, id));
365372
}
366373
ItemKind::Mod(_unsafety, mod_kind) => match mod_kind {
367374
ModKind::Loaded(items, _inline, _inner_span) => {
@@ -418,7 +425,7 @@ impl WalkItemKind for ItemKind {
418425
walk_list!(visitor, visit_param_bound, bounds, BoundKind::Bound);
419426
}
420427
ItemKind::MacCall(mac) => try_visit!(visitor.visit_mac_call(mac)),
421-
ItemKind::MacroDef(ts) => try_visit!(visitor.visit_mac_def(ts, *id)),
428+
ItemKind::MacroDef(ts) => try_visit!(visitor.visit_mac_def(ts, id)),
422429
ItemKind::Delegation(box Delegation {
423430
id,
424431
qself,
@@ -434,7 +441,7 @@ impl WalkItemKind for ItemKind {
434441
}
435442
ItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => {
436443
try_visit!(walk_qself(visitor, qself));
437-
try_visit!(visitor.visit_path(prefix, *id));
444+
try_visit!(visitor.visit_path(prefix, id));
438445
if let Some(suffixes) = suffixes {
439446
for (ident, rename) in suffixes {
440447
visitor.visit_ident(ident);
@@ -452,9 +459,9 @@ impl WalkItemKind for ItemKind {
452459

453460
pub fn walk_item<'a, V: Visitor<'a>>(
454461
visitor: &mut V,
455-
item: &'a Item<impl WalkItemKind>,
462+
item: &'a Item<impl WalkItemKind<Ctxt = ()>>,
456463
) -> V::Result {
457-
walk_assoc_item(visitor, item, AssocCtxt::Trait /*ignored*/)
464+
walk_assoc_item(visitor, item, ())
458465
}
459466

460467
pub fn walk_enum_def<'a, V: Visitor<'a>>(
@@ -684,20 +691,23 @@ pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) -> V::Res
684691
}
685692

686693
impl WalkItemKind for ForeignItemKind {
694+
type Ctxt = ();
687695
fn walk<'a, V: Visitor<'a>>(
688696
&'a self,
689-
item: &'a Item<Self>,
690-
_ctxt: AssocCtxt,
697+
span: Span,
698+
id: NodeId,
699+
ident: &'a Ident,
700+
vis: &'a Visibility,
701+
_ctxt: Self::Ctxt,
691702
visitor: &mut V,
692703
) -> V::Result {
693-
let &Item { id, span, ident, ref vis, .. } = item;
694704
match self {
695705
ForeignItemKind::Static(box StaticItem { ty, mutability: _, expr, safety: _ }) => {
696706
try_visit!(visitor.visit_ty(ty));
697707
visit_opt!(visitor, visit_expr, expr);
698708
}
699709
ForeignItemKind::Fn(box Fn { defaultness: _, generics, sig, body }) => {
700-
let kind = FnKind::Fn(FnCtxt::Foreign, ident, sig, vis, generics, body.as_deref());
710+
let kind = FnKind::Fn(FnCtxt::Foreign, ident, sig, vis, generics, body);
701711
try_visit!(visitor.visit_fn(kind, span, id));
702712
}
703713
ForeignItemKind::TyAlias(box TyAlias {
@@ -850,22 +860,24 @@ pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>) -> V::Resu
850860
}
851861

852862
impl WalkItemKind for AssocItemKind {
863+
type Ctxt = AssocCtxt;
853864
fn walk<'a, V: Visitor<'a>>(
854865
&'a self,
855-
item: &'a Item<Self>,
856-
ctxt: AssocCtxt,
866+
span: Span,
867+
id: NodeId,
868+
ident: &'a Ident,
869+
vis: &'a Visibility,
870+
ctxt: Self::Ctxt,
857871
visitor: &mut V,
858872
) -> V::Result {
859-
let &Item { id, span, ident, ref vis, .. } = item;
860873
match self {
861874
AssocItemKind::Const(box ConstItem { defaultness: _, generics, ty, expr }) => {
862875
try_visit!(visitor.visit_generics(generics));
863876
try_visit!(visitor.visit_ty(ty));
864877
visit_opt!(visitor, visit_expr, expr);
865878
}
866879
AssocItemKind::Fn(box Fn { defaultness: _, generics, sig, body }) => {
867-
let kind =
868-
FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, vis, generics, body.as_deref());
880+
let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, vis, generics, body);
869881
try_visit!(visitor.visit_fn(kind, span, id));
870882
}
871883
AssocItemKind::Type(box TyAlias {
@@ -913,16 +925,16 @@ impl WalkItemKind for AssocItemKind {
913925
}
914926
}
915927

916-
pub fn walk_assoc_item<'a, V: Visitor<'a>>(
928+
pub fn walk_assoc_item<'a, V: Visitor<'a>, K: WalkItemKind>(
917929
visitor: &mut V,
918-
item: &'a Item<impl WalkItemKind>,
919-
ctxt: AssocCtxt,
930+
item: &'a Item<K>,
931+
ctxt: K::Ctxt,
920932
) -> V::Result {
921-
let Item { id: _, span: _, ident, vis, attrs, kind, tokens: _ } = item;
933+
let Item { id, span, ident, vis, attrs, kind, tokens: _ } = item;
922934
walk_list!(visitor, visit_attribute, attrs);
923935
try_visit!(visitor.visit_vis(vis));
924936
try_visit!(visitor.visit_ident(ident));
925-
try_visit!(kind.walk(item, ctxt, visitor));
937+
try_visit!(kind.walk(*span, *id, ident, vis, ctxt, visitor));
926938
V::Result::output()
927939
}
928940

‎compiler/rustc_ast_passes/src/ast_validation.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -946,8 +946,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
946946

947947
self.visit_vis(&item.vis);
948948
self.visit_ident(&item.ident);
949-
let kind =
950-
FnKind::Fn(FnCtxt::Free, item.ident, sig, &item.vis, generics, body.as_deref());
949+
let kind = FnKind::Fn(FnCtxt::Free, &item.ident, sig, &item.vis, generics, body);
951950
self.visit_fn(kind, item.span, item.id);
952951
walk_list!(self, visit_attribute, &item.attrs);
953952
return; // Avoid visiting again.
@@ -1476,14 +1475,8 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
14761475
{
14771476
self.visit_vis(&item.vis);
14781477
self.visit_ident(&item.ident);
1479-
let kind = FnKind::Fn(
1480-
FnCtxt::Assoc(ctxt),
1481-
item.ident,
1482-
sig,
1483-
&item.vis,
1484-
generics,
1485-
body.as_deref(),
1486-
);
1478+
let kind =
1479+
FnKind::Fn(FnCtxt::Assoc(ctxt), &item.ident, sig, &item.vis, generics, body);
14871480
walk_list!(self, visit_attribute, &item.attrs);
14881481
self.visit_fn(kind, item.span, item.id);
14891482
}

‎compiler/rustc_builtin_macros/src/cfg_eval.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,10 @@ impl MutVisitor for CfgEval<'_> {
204204
fn flat_map_assoc_item(
205205
&mut self,
206206
item: P<ast::AssocItem>,
207-
_ctxt: AssocCtxt,
207+
ctxt: AssocCtxt,
208208
) -> SmallVec<[P<ast::AssocItem>; 1]> {
209209
let item = configure!(self, item);
210-
mut_visit::walk_flat_map_item(self, item)
210+
mut_visit::walk_flat_map_assoc_item(self, item, ctxt)
211211
}
212212

213213
fn flat_map_foreign_item(

‎compiler/rustc_builtin_macros/src/test_harness.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,15 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
144144
item.kind
145145
{
146146
let prev_tests = mem::take(&mut self.tests);
147-
walk_item_kind(&mut item.kind, item.span, item.id, self);
147+
walk_item_kind(
148+
&mut item.kind,
149+
item.span,
150+
item.id,
151+
&mut item.ident,
152+
&mut item.vis,
153+
(),
154+
self,
155+
);
148156
self.add_test_cases(item.id, span, prev_tests);
149157
} else {
150158
// But in those cases, we emit a lint to warn the user of these missing tests.

‎compiler/rustc_expand/src/expand.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,7 +1303,7 @@ impl InvocationCollectorNode for AstNodeWrapper<P<ast::AssocItem>, TraitItemTag>
13031303
fragment.make_trait_items()
13041304
}
13051305
fn walk_flat_map<V: MutVisitor>(self, visitor: &mut V) -> Self::OutputTy {
1306-
walk_flat_map_item(visitor, self.wrapped)
1306+
walk_flat_map_assoc_item(visitor, self.wrapped, AssocCtxt::Trait)
13071307
}
13081308
fn is_mac_call(&self) -> bool {
13091309
matches!(self.wrapped.kind, AssocItemKind::MacCall(..))
@@ -1344,7 +1344,7 @@ impl InvocationCollectorNode for AstNodeWrapper<P<ast::AssocItem>, ImplItemTag>
13441344
fragment.make_impl_items()
13451345
}
13461346
fn walk_flat_map<V: MutVisitor>(self, visitor: &mut V) -> Self::OutputTy {
1347-
walk_flat_map_item(visitor, self.wrapped)
1347+
walk_flat_map_assoc_item(visitor, self.wrapped, AssocCtxt::Impl)
13481348
}
13491349
fn is_mac_call(&self) -> bool {
13501350
matches!(self.wrapped.kind, AssocItemKind::MacCall(..))

‎compiler/rustc_expand/src/placeholders.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ impl MutVisitor for PlaceholderExpander {
286286
AssocCtxt::Impl => it.make_impl_items(),
287287
}
288288
}
289-
_ => walk_flat_map_item(self, item),
289+
_ => walk_flat_map_assoc_item(self, item, ctxt),
290290
}
291291
}
292292

‎compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
13241324
// This way they can use `macro_rules` defined later.
13251325
self.visit_vis(&item.vis);
13261326
self.visit_ident(&item.ident);
1327-
item.kind.walk(item, AssocCtxt::Trait, self);
1327+
item.kind.walk(item.span, item.id, &item.ident, &item.vis, (), self);
13281328
visit::walk_list!(self, visit_attribute, &item.attrs);
13291329
}
13301330
_ => visit::walk_item(self, item),

‎src/tools/rustfmt/src/items.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3449,21 +3449,14 @@ impl Rewrite for ast::ForeignItem {
34493449
ref generics,
34503450
ref body,
34513451
} = **fn_kind;
3452-
if let Some(ref body) = body {
3452+
if body.is_some() {
34533453
let mut visitor = FmtVisitor::from_context(context);
34543454
visitor.block_indent = shape.indent;
34553455
visitor.last_pos = self.span.lo();
34563456
let inner_attrs = inner_attributes(&self.attrs);
34573457
let fn_ctxt = visit::FnCtxt::Foreign;
34583458
visitor.visit_fn(
3459-
visit::FnKind::Fn(
3460-
fn_ctxt,
3461-
self.ident,
3462-
sig,
3463-
&self.vis,
3464-
generics,
3465-
Some(body),
3466-
),
3459+
visit::FnKind::Fn(fn_ctxt, &self.ident, sig, &self.vis, generics, body),
34673460
&sig.decl,
34683461
self.span,
34693462
defaultness,

‎src/tools/rustfmt/src/visitor.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
390390
block = b;
391391
self.rewrite_fn_before_block(
392392
indent,
393-
ident,
393+
*ident,
394394
&FnSig::from_fn_kind(&fk, fd, defaultness),
395395
mk_sp(s.lo(), b.span.lo()),
396396
)
@@ -540,21 +540,14 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
540540
ref generics,
541541
ref body,
542542
} = **fn_kind;
543-
if let Some(ref body) = body {
543+
if body.is_some() {
544544
let inner_attrs = inner_attributes(&item.attrs);
545545
let fn_ctxt = match sig.header.ext {
546546
ast::Extern::None => visit::FnCtxt::Free,
547547
_ => visit::FnCtxt::Foreign,
548548
};
549549
self.visit_fn(
550-
visit::FnKind::Fn(
551-
fn_ctxt,
552-
item.ident,
553-
sig,
554-
&item.vis,
555-
generics,
556-
Some(body),
557-
),
550+
visit::FnKind::Fn(fn_ctxt, &item.ident, sig, &item.vis, generics, body),
558551
&sig.decl,
559552
item.span,
560553
defaultness,
@@ -648,11 +641,11 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
648641
ref generics,
649642
ref body,
650643
} = **fn_kind;
651-
if let Some(ref body) = body {
644+
if body.is_some() {
652645
let inner_attrs = inner_attributes(&ai.attrs);
653646
let fn_ctxt = visit::FnCtxt::Assoc(assoc_ctxt);
654647
self.visit_fn(
655-
visit::FnKind::Fn(fn_ctxt, ai.ident, sig, &ai.vis, generics, Some(body)),
648+
visit::FnKind::Fn(fn_ctxt, &ai.ident, sig, &ai.vis, generics, body),
656649
&sig.decl,
657650
ai.span,
658651
defaultness,

0 commit comments

Comments
 (0)
Please sign in to comment.