Skip to content

Commit e7618cf

Browse files
committed
Complete mut_visit.
1 parent 24057f7 commit e7618cf

File tree

1 file changed

+90
-15
lines changed

1 file changed

+90
-15
lines changed

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 90 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,8 @@ fn visit_constness<T: MutVisitor>(vis: &mut T, constness: &mut Const) {
860860
fn walk_closure_binder<T: MutVisitor>(vis: &mut T, binder: &mut ClosureBinder) {
861861
match binder {
862862
ClosureBinder::NotPresent => {}
863-
ClosureBinder::For { span: _, generic_params } => {
863+
ClosureBinder::For { span, generic_params } => {
864+
vis.visit_span(span);
864865
generic_params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
865866
}
866867
}
@@ -924,6 +925,22 @@ fn walk_param_bound<T: MutVisitor>(vis: &mut T, pb: &mut GenericBound) {
924925
}
925926
}
926927

928+
fn walk_trait_bound_modifier<T: MutVisitor>(vis: &mut T, tbm: &mut TraitBoundModifiers) {
929+
let TraitBoundModifiers { constness, asyncness, polarity } = tbm;
930+
match constness {
931+
BoundConstness::Never => {}
932+
BoundConstness::Always(span) | BoundConstness::Maybe(span) => vis.visit_span(span),
933+
}
934+
match asyncness {
935+
BoundAsyncness::Normal => {}
936+
BoundAsyncness::Async(span) => vis.visit_span(span),
937+
}
938+
match polarity {
939+
BoundPolarity::Positive => {}
940+
BoundPolarity::Negative(span) | BoundPolarity::Maybe(span) => vis.visit_span(span),
941+
}
942+
}
943+
927944
fn walk_precise_capturing_arg<T: MutVisitor>(vis: &mut T, arg: &mut PreciseCapturingArg) {
928945
match arg {
929946
PreciseCapturingArg::Lifetime(lt) => {
@@ -1035,9 +1052,10 @@ fn walk_trait_ref<T: MutVisitor>(vis: &mut T, TraitRef { path, ref_id }: &mut Tr
10351052
}
10361053

10371054
fn walk_poly_trait_ref<T: MutVisitor>(vis: &mut T, p: &mut PolyTraitRef) {
1038-
let PolyTraitRef { bound_generic_params, modifiers: _, trait_ref, span } = p;
1055+
let PolyTraitRef { bound_generic_params, modifiers, trait_ref, span } = p;
10391056
bound_generic_params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
10401057
vis.visit_trait_ref(trait_ref);
1058+
walk_trait_bound_modifier(vis, modifiers);
10411059
vis.visit_span(span);
10421060
}
10431061

@@ -1377,22 +1395,32 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
13771395
vis.visit_span(span);
13781396
}
13791397

1380-
fn walk_anon_const<T: MutVisitor>(vis: &mut T, AnonConst { id, value }: &mut AnonConst) {
1398+
pub fn walk_anon_const<T: MutVisitor>(vis: &mut T, AnonConst { id, value }: &mut AnonConst) {
13811399
vis.visit_id(id);
13821400
vis.visit_expr(value);
13831401
}
13841402

13851403
fn walk_inline_asm<T: MutVisitor>(vis: &mut T, asm: &mut InlineAsm) {
1386-
// FIXME: Visit spans inside all this currently ignored stuff.
13871404
let InlineAsm {
13881405
asm_macro: _,
1389-
template: _,
1390-
template_strs: _,
1406+
template,
1407+
template_strs,
13911408
operands,
1392-
clobber_abis: _,
1409+
clobber_abis,
13931410
options: _,
1394-
line_spans: _,
1411+
line_spans,
13951412
} = asm;
1413+
for piece in template.iter_mut() {
1414+
match piece {
1415+
InlineAsmTemplatePiece::String(_str) => {}
1416+
InlineAsmTemplatePiece::Placeholder { operand_idx: _, modifier: _, span } => {
1417+
vis.visit_span(span)
1418+
}
1419+
}
1420+
}
1421+
for (_s1, _s2, span) in template_strs.iter_mut() {
1422+
vis.visit_span(span)
1423+
}
13961424
for (op, span) in operands {
13971425
match op {
13981426
InlineAsmOperand::In { expr, reg: _ }
@@ -1411,6 +1439,12 @@ fn walk_inline_asm<T: MutVisitor>(vis: &mut T, asm: &mut InlineAsm) {
14111439
}
14121440
vis.visit_span(span);
14131441
}
1442+
for (_s1, span) in clobber_abis.iter_mut() {
1443+
vis.visit_span(span)
1444+
}
1445+
for span in line_spans.iter_mut() {
1446+
vis.visit_span(span)
1447+
}
14141448
}
14151449

14161450
fn walk_inline_asm_sym<T: MutVisitor>(
@@ -1423,8 +1457,7 @@ fn walk_inline_asm_sym<T: MutVisitor>(
14231457
}
14241458

14251459
fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
1426-
// FIXME: visit the template exhaustively.
1427-
let FormatArgs { span, template: _, arguments } = fmt;
1460+
let FormatArgs { span, template, arguments } = fmt;
14281461
for FormatArgument { kind, expr } in arguments.all_args_mut() {
14291462
match kind {
14301463
FormatArgumentKind::Named(ident) | FormatArgumentKind::Captured(ident) => {
@@ -1434,9 +1467,48 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
14341467
}
14351468
vis.visit_expr(expr);
14361469
}
1470+
for piece in template.iter_mut() {
1471+
match piece {
1472+
FormatArgsPiece::Literal(_symbol) => {}
1473+
FormatArgsPiece::Placeholder(placeholder) => walk_format_placeholder(vis, placeholder),
1474+
}
1475+
}
14371476
vis.visit_span(span);
14381477
}
14391478

1479+
fn walk_format_placeholder<T: MutVisitor>(
1480+
vis: &mut T,
1481+
FormatPlaceholder { argument, span, format_options, format_trait: _ }: &mut FormatPlaceholder,
1482+
) {
1483+
visit_opt(span, |span| vis.visit_span(span));
1484+
let FormatArgPosition { span, index: _, kind: _ } = argument;
1485+
visit_opt(span, |span| vis.visit_span(span));
1486+
let FormatOptions {
1487+
width,
1488+
precision,
1489+
alignment: _,
1490+
fill: _,
1491+
sign: _,
1492+
alternate: _,
1493+
zero_pad: _,
1494+
debug_hex: _,
1495+
} = format_options;
1496+
match width {
1497+
None => {}
1498+
Some(FormatCount::Literal(_)) => {}
1499+
Some(FormatCount::Argument(FormatArgPosition { span, index: _, kind: _ })) => {
1500+
visit_opt(span, |span| vis.visit_span(span))
1501+
}
1502+
}
1503+
match precision {
1504+
None => {}
1505+
Some(FormatCount::Literal(_)) => {}
1506+
Some(FormatCount::Argument(FormatArgPosition { span, index: _, kind: _ })) => {
1507+
visit_opt(span, |span| vis.visit_span(span))
1508+
}
1509+
}
1510+
}
1511+
14401512
pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, tokens }: &mut Expr) {
14411513
vis.visit_id(id);
14421514
visit_attrs(vis, attrs);
@@ -1467,7 +1539,8 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
14671539
visit_thin_exprs(vis, call_args);
14681540
vis.visit_span(span);
14691541
}
1470-
ExprKind::Binary(_binop, lhs, rhs) => {
1542+
ExprKind::Binary(Spanned { node: _binop, span }, lhs, rhs) => {
1543+
vis.visit_span(span);
14711544
vis.visit_expr(lhs);
14721545
vis.visit_expr(rhs);
14731546
}
@@ -1533,9 +1606,10 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
15331606
visit_opt(label, |label| vis.visit_label(label));
15341607
vis.visit_block(blk);
15351608
}
1536-
ExprKind::Gen(_capture_by, body, _kind, decl_span) => {
1609+
ExprKind::Gen(capture_clause, body, _kind, decl_span) => {
15371610
vis.visit_block(body);
15381611
vis.visit_span(decl_span);
1612+
vis.visit_capture_by(capture_clause);
15391613
}
15401614
ExprKind::Await(expr, await_kw_span) => {
15411615
vis.visit_expr(expr);
@@ -1546,7 +1620,8 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
15461620
vis.visit_expr(er);
15471621
vis.visit_span(span);
15481622
}
1549-
ExprKind::AssignOp(_op, el, er) => {
1623+
ExprKind::AssignOp(Spanned { node: _binop, span }, el, er) => {
1624+
vis.visit_span(span);
15501625
vis.visit_expr(el);
15511626
vis.visit_expr(er);
15521627
}
@@ -1598,7 +1673,7 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
15981673
fields.flat_map_in_place(|field| vis.flat_map_expr_field(field));
15991674
match rest {
16001675
StructRest::Base(expr) => vis.visit_expr(expr),
1601-
StructRest::Rest(_span) => {}
1676+
StructRest::Rest(span) => vis.visit_span(span),
16021677
StructRest::None => {}
16031678
}
16041679
}
@@ -1631,6 +1706,7 @@ pub fn walk_flat_map_stmt<T: MutVisitor>(
16311706
Stmt { kind, mut span, mut id }: Stmt,
16321707
) -> SmallVec<[Stmt; 1]> {
16331708
vis.visit_id(&mut id);
1709+
vis.visit_span(&mut span);
16341710
let stmts: SmallVec<_> = walk_flat_map_stmt_kind(vis, kind)
16351711
.into_iter()
16361712
.map(|kind| Stmt { id, kind, span })
@@ -1641,7 +1717,6 @@ pub fn walk_flat_map_stmt<T: MutVisitor>(
16411717
the visitor should implement custom statement visiting"
16421718
);
16431719
}
1644-
vis.visit_span(&mut span);
16451720
stmts
16461721
}
16471722

0 commit comments

Comments
 (0)