@@ -871,7 +871,8 @@ fn visit_constness<T: MutVisitor>(constness: &mut Const, vis: &mut T) {
871871fn noop_visit_closure_binder < T : MutVisitor > ( binder : & mut ClosureBinder , vis : & mut T ) {
872872 match binder {
873873 ClosureBinder :: NotPresent => { }
874- ClosureBinder :: For { span : _, generic_params } => {
874+ ClosureBinder :: For { span, generic_params } => {
875+ vis. visit_span ( span) ;
875876 generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
876877 }
877878 }
@@ -904,7 +905,10 @@ fn noop_visit_fn_ret_ty<T: MutVisitor>(fn_ret_ty: &mut FnRetTy, vis: &mut T) {
904905
905906fn noop_visit_param_bound < T : MutVisitor > ( pb : & mut GenericBound , vis : & mut T ) {
906907 match pb {
907- GenericBound :: Trait ( ty, _modifier) => vis. visit_poly_trait_ref ( ty) ,
908+ GenericBound :: Trait ( ty, modifier) => {
909+ vis. visit_poly_trait_ref ( ty) ;
910+ visit_trait_bound_modifier ( modifier, vis) ;
911+ }
908912 GenericBound :: Outlives ( lifetime) => noop_visit_lifetime ( lifetime, vis) ,
909913 GenericBound :: Use ( args, span) => {
910914 for arg in args {
@@ -915,6 +919,22 @@ fn noop_visit_param_bound<T: MutVisitor>(pb: &mut GenericBound, vis: &mut T) {
915919 }
916920}
917921
922+ fn visit_trait_bound_modifier < T : MutVisitor > ( tbm : & mut TraitBoundModifiers , vis : & mut T ) {
923+ let TraitBoundModifiers { constness, asyncness, polarity } = tbm;
924+ match constness {
925+ BoundConstness :: Never => { }
926+ BoundConstness :: Always ( span) | BoundConstness :: Maybe ( span) => vis. visit_span ( span) ,
927+ }
928+ match asyncness {
929+ BoundAsyncness :: Normal => { }
930+ BoundAsyncness :: Async ( span) => vis. visit_span ( span) ,
931+ }
932+ match polarity {
933+ BoundPolarity :: Positive => { }
934+ BoundPolarity :: Negative ( span) | BoundPolarity :: Maybe ( span) => vis. visit_span ( span) ,
935+ }
936+ }
937+
918938fn noop_visit_precise_capturing_arg < T : MutVisitor > ( arg : & mut PreciseCapturingArg , vis : & mut T ) {
919939 match arg {
920940 PreciseCapturingArg :: Lifetime ( lt) => {
@@ -1369,21 +1389,24 @@ pub fn noop_visit_pat<T: MutVisitor>(pat: &mut P<Pat>, vis: &mut T) {
13691389 vis. visit_span ( span) ;
13701390}
13711391
1372- fn noop_visit_anon_const < T : MutVisitor > ( AnonConst { id, value } : & mut AnonConst , vis : & mut T ) {
1392+ pub fn noop_visit_anon_const < T : MutVisitor > ( AnonConst { id, value } : & mut AnonConst , vis : & mut T ) {
13731393 vis. visit_id ( id) ;
13741394 vis. visit_expr ( value) ;
13751395}
13761396
13771397fn noop_visit_inline_asm < T : MutVisitor > ( asm : & mut InlineAsm , vis : & mut T ) {
1378- // FIXME: Visit spans inside all this currently ignored stuff.
1379- let InlineAsm {
1380- template : _,
1381- template_strs : _,
1382- operands,
1383- clobber_abis : _,
1384- options : _,
1385- line_spans : _,
1386- } = asm;
1398+ let InlineAsm { template, template_strs, operands, clobber_abis, options : _, line_spans } = asm;
1399+ for piece in template. iter_mut ( ) {
1400+ match piece {
1401+ InlineAsmTemplatePiece :: String ( _str) => { }
1402+ InlineAsmTemplatePiece :: Placeholder { operand_idx : _, modifier : _, span } => {
1403+ vis. visit_span ( span)
1404+ }
1405+ }
1406+ }
1407+ for ( _s1, _s2, span) in template_strs. iter_mut ( ) {
1408+ vis. visit_span ( span)
1409+ }
13871410 for ( op, span) in operands {
13881411 match op {
13891412 InlineAsmOperand :: In { expr, reg : _ }
@@ -1402,6 +1425,12 @@ fn noop_visit_inline_asm<T: MutVisitor>(asm: &mut InlineAsm, vis: &mut T) {
14021425 }
14031426 vis. visit_span ( span) ;
14041427 }
1428+ for ( _s1, span) in clobber_abis. iter_mut ( ) {
1429+ vis. visit_span ( span)
1430+ }
1431+ for span in line_spans. iter_mut ( ) {
1432+ vis. visit_span ( span)
1433+ }
14051434}
14061435
14071436fn noop_visit_inline_asm_sym < T : MutVisitor > (
@@ -1414,8 +1443,7 @@ fn noop_visit_inline_asm_sym<T: MutVisitor>(
14141443}
14151444
14161445fn noop_visit_format_args < T : MutVisitor > ( fmt : & mut FormatArgs , vis : & mut T ) {
1417- // FIXME: visit the template exhaustively.
1418- let FormatArgs { span, template : _, arguments } = fmt;
1446+ let FormatArgs { span, template, arguments } = fmt;
14191447 for FormatArgument { kind, expr } in arguments. all_args_mut ( ) {
14201448 match kind {
14211449 FormatArgumentKind :: Named ( ident) | FormatArgumentKind :: Captured ( ident) => {
@@ -1425,9 +1453,48 @@ fn noop_visit_format_args<T: MutVisitor>(fmt: &mut FormatArgs, vis: &mut T) {
14251453 }
14261454 vis. visit_expr ( expr) ;
14271455 }
1456+ for piece in template. iter_mut ( ) {
1457+ match piece {
1458+ FormatArgsPiece :: Literal ( _symbol) => { }
1459+ FormatArgsPiece :: Placeholder ( placeholder) => visit_format_placeholder ( placeholder, vis) ,
1460+ }
1461+ }
14281462 vis. visit_span ( span) ;
14291463}
14301464
1465+ fn visit_format_placeholder < T : MutVisitor > (
1466+ FormatPlaceholder { argument, span, format_options, format_trait : _ } : & mut FormatPlaceholder ,
1467+ vis : & mut T ,
1468+ ) {
1469+ visit_opt ( span, |span| vis. visit_span ( span) ) ;
1470+ let FormatArgPosition { span, index : _, kind : _ } = argument;
1471+ visit_opt ( span, |span| vis. visit_span ( span) ) ;
1472+ let FormatOptions {
1473+ width,
1474+ precision,
1475+ alignment : _,
1476+ fill : _,
1477+ sign : _,
1478+ alternate : _,
1479+ zero_pad : _,
1480+ debug_hex : _,
1481+ } = format_options;
1482+ match width {
1483+ None => { }
1484+ Some ( FormatCount :: Literal ( _) ) => { }
1485+ Some ( FormatCount :: Argument ( FormatArgPosition { span, index : _, kind : _ } ) ) => {
1486+ visit_opt ( span, |span| vis. visit_span ( span) )
1487+ }
1488+ }
1489+ match precision {
1490+ None => { }
1491+ Some ( FormatCount :: Literal ( _) ) => { }
1492+ Some ( FormatCount :: Argument ( FormatArgPosition { span, index : _, kind : _ } ) ) => {
1493+ visit_opt ( span, |span| vis. visit_span ( span) )
1494+ }
1495+ }
1496+ }
1497+
14311498pub fn noop_visit_expr < T : MutVisitor > (
14321499 Expr { kind, id, span, attrs, tokens } : & mut Expr ,
14331500 vis : & mut T ,
@@ -1461,7 +1528,8 @@ pub fn noop_visit_expr<T: MutVisitor>(
14611528 visit_thin_exprs ( call_args, vis) ;
14621529 vis. visit_span ( span) ;
14631530 }
1464- ExprKind :: Binary ( _binop, lhs, rhs) => {
1531+ ExprKind :: Binary ( Spanned { node : _binop, span } , lhs, rhs) => {
1532+ vis. visit_span ( span) ;
14651533 vis. visit_expr ( lhs) ;
14661534 vis. visit_expr ( rhs) ;
14671535 }
@@ -1529,9 +1597,10 @@ pub fn noop_visit_expr<T: MutVisitor>(
15291597 visit_opt ( label, |label| vis. visit_label ( label) ) ;
15301598 vis. visit_block ( blk) ;
15311599 }
1532- ExprKind :: Gen ( _capture_by , body, _kind, decl_span) => {
1600+ ExprKind :: Gen ( capture_clause , body, _kind, decl_span) => {
15331601 vis. visit_block ( body) ;
15341602 vis. visit_span ( decl_span) ;
1603+ vis. visit_capture_by ( capture_clause) ;
15351604 }
15361605 ExprKind :: Await ( expr, await_kw_span) => {
15371606 vis. visit_expr ( expr) ;
@@ -1542,7 +1611,8 @@ pub fn noop_visit_expr<T: MutVisitor>(
15421611 vis. visit_expr ( er) ;
15431612 vis. visit_span ( span) ;
15441613 }
1545- ExprKind :: AssignOp ( _op, el, er) => {
1614+ ExprKind :: AssignOp ( Spanned { node : _binop, span } , el, er) => {
1615+ vis. visit_span ( span) ;
15461616 vis. visit_expr ( el) ;
15471617 vis. visit_expr ( er) ;
15481618 }
@@ -1594,7 +1664,7 @@ pub fn noop_visit_expr<T: MutVisitor>(
15941664 fields. flat_map_in_place ( |field| vis. flat_map_expr_field ( field) ) ;
15951665 match rest {
15961666 StructRest :: Base ( expr) => vis. visit_expr ( expr) ,
1597- StructRest :: Rest ( _span ) => { }
1667+ StructRest :: Rest ( span ) => vis . visit_span ( span ) ,
15981668 StructRest :: None => { }
15991669 }
16001670 }
@@ -1627,6 +1697,7 @@ pub fn noop_flat_map_stmt<T: MutVisitor>(
16271697 vis : & mut T ,
16281698) -> SmallVec < [ Stmt ; 1 ] > {
16291699 vis. visit_id ( & mut id) ;
1700+ vis. visit_span ( & mut span) ;
16301701 let stmts: SmallVec < _ > = noop_flat_map_stmt_kind ( kind, vis)
16311702 . into_iter ( )
16321703 . map ( |kind| Stmt { id, kind, span } )
@@ -1637,7 +1708,6 @@ pub fn noop_flat_map_stmt<T: MutVisitor>(
16371708 the visitor should implement custom statement visiting"
16381709 ) ;
16391710 }
1640- vis. visit_span ( & mut span) ;
16411711 stmts
16421712}
16431713
0 commit comments