@@ -367,7 +367,7 @@ where
367367} 
368368
369369// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`. 
370- fn  visit_attrs < T :  MutVisitor > ( attrs :  & mut  AttrVec ,  vis :  & mut  T )  { 
370+ pub   fn  visit_attrs < T :  MutVisitor > ( attrs :  & mut  AttrVec ,  vis :  & mut  T )  { 
371371    for  attr in  attrs. iter_mut ( )  { 
372372        vis. visit_attribute ( attr) ; 
373373    } 
@@ -390,7 +390,7 @@ fn visit_bounds<T: MutVisitor>(bounds: &mut GenericBounds, vis: &mut T) {
390390} 
391391
392392// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`. 
393- fn  visit_fn_sig < T :  MutVisitor > ( FnSig  {  header,  decl,  span } :  & mut  FnSig ,  vis :  & mut  T )  { 
393+ pub   fn  visit_fn_sig < T :  MutVisitor > ( FnSig  {  header,  decl,  span } :  & mut  FnSig ,  vis :  & mut  T )  { 
394394    vis. visit_fn_header ( header) ; 
395395    vis. visit_fn_decl ( decl) ; 
396396    vis. visit_span ( span) ; 
@@ -637,7 +637,7 @@ fn noop_visit_local<T: MutVisitor>(local: &mut P<Local>, vis: &mut T) {
637637    vis. visit_span ( span) ; 
638638} 
639639
640- fn  noop_visit_attribute < T :  MutVisitor > ( attr :  & mut  Attribute ,  vis :  & mut  T )  { 
640+ pub   fn  noop_visit_attribute < T :  MutVisitor > ( attr :  & mut  Attribute ,  vis :  & mut  T )  { 
641641    let  Attribute  {  kind,  id :  _,  style :  _,  span }  = attr; 
642642    match  kind { 
643643        AttrKind :: Normal ( normal)  => { 
@@ -836,7 +836,7 @@ fn visit_nonterminal<T: MutVisitor>(nt: &mut token::Nonterminal, vis: &mut T) {
836836} 
837837
838838// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`. 
839- fn  visit_defaultness < T :  MutVisitor > ( defaultness :  & mut  Defaultness ,  vis :  & mut  T )  { 
839+ pub   fn  visit_defaultness < T :  MutVisitor > ( defaultness :  & mut  Defaultness ,  vis :  & mut  T )  { 
840840    match  defaultness { 
841841        Defaultness :: Default ( span)  => vis. visit_span ( span) , 
842842        Defaultness :: Final  => { } 
@@ -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)  => { 
@@ -941,8 +961,9 @@ pub fn noop_flat_map_generic_param<T: MutVisitor>(
941961        GenericParamKind :: Type  {  default }  => { 
942962            visit_opt ( default,  |default| vis. visit_ty ( default) ) ; 
943963        } 
944-         GenericParamKind :: Const  {  ty,  kw_span :  _ ,  default }  => { 
964+         GenericParamKind :: Const  {  ty,  span ,  default }  => { 
945965            vis. visit_ty ( ty) ; 
966+             vis. visit_span ( span) ; 
946967            visit_opt ( default,  |default| vis. visit_anon_const ( default) ) ; 
947968        } 
948969    } 
@@ -1368,21 +1389,24 @@ pub fn noop_visit_pat<T: MutVisitor>(pat: &mut P<Pat>, vis: &mut T) {
13681389    vis. visit_span ( span) ; 
13691390} 
13701391
1371- 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 )  { 
13721393    vis. visit_id ( id) ; 
13731394    vis. visit_expr ( value) ; 
13741395} 
13751396
13761397fn  noop_visit_inline_asm < T :  MutVisitor > ( asm :  & mut  InlineAsm ,  vis :  & mut  T )  { 
1377-     // FIXME: Visit spans inside all this currently ignored stuff. 
1378-     let  InlineAsm  { 
1379-         template :  _, 
1380-         template_strs :  _, 
1381-         operands, 
1382-         clobber_abis :  _, 
1383-         options :  _, 
1384-         line_spans :  _, 
1385-     }  = 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+     } 
13861410    for  ( op,  span)  in  operands { 
13871411        match  op { 
13881412            InlineAsmOperand :: In  {  expr,  reg :  _ } 
@@ -1401,6 +1425,12 @@ fn noop_visit_inline_asm<T: MutVisitor>(asm: &mut InlineAsm, vis: &mut T) {
14011425        } 
14021426        vis. visit_span ( span) ; 
14031427    } 
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+     } 
14041434} 
14051435
14061436fn  noop_visit_inline_asm_sym < T :  MutVisitor > ( 
@@ -1413,8 +1443,7 @@ fn noop_visit_inline_asm_sym<T: MutVisitor>(
14131443} 
14141444
14151445fn  noop_visit_format_args < T :  MutVisitor > ( fmt :  & mut  FormatArgs ,  vis :  & mut  T )  { 
1416-     // FIXME: visit the template exhaustively. 
1417-     let  FormatArgs  {  span,  template :  _,  arguments }  = fmt; 
1446+     let  FormatArgs  {  span,  template,  arguments }  = fmt; 
14181447    for  FormatArgument  {  kind,  expr }  in  arguments. all_args_mut ( )  { 
14191448        match  kind { 
14201449            FormatArgumentKind :: Named ( ident)  | FormatArgumentKind :: Captured ( ident)  => { 
@@ -1424,9 +1453,48 @@ fn noop_visit_format_args<T: MutVisitor>(fmt: &mut FormatArgs, vis: &mut T) {
14241453        } 
14251454        vis. visit_expr ( expr) ; 
14261455    } 
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+     } 
14271462    vis. visit_span ( span) ; 
14281463} 
14291464
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+ 
14301498pub  fn  noop_visit_expr < T :  MutVisitor > ( 
14311499    Expr  {  kind,  id,  span,  attrs,  tokens } :  & mut  Expr , 
14321500    vis :  & mut  T , 
@@ -1460,7 +1528,8 @@ pub fn noop_visit_expr<T: MutVisitor>(
14601528            visit_thin_exprs ( call_args,  vis) ; 
14611529            vis. visit_span ( span) ; 
14621530        } 
1463-         ExprKind :: Binary ( _binop,  lhs,  rhs)  => { 
1531+         ExprKind :: Binary ( Spanned  {  node :  _binop,  span } ,  lhs,  rhs)  => { 
1532+             vis. visit_span ( span) ; 
14641533            vis. visit_expr ( lhs) ; 
14651534            vis. visit_expr ( rhs) ; 
14661535        } 
@@ -1528,9 +1597,10 @@ pub fn noop_visit_expr<T: MutVisitor>(
15281597            visit_opt ( label,  |label| vis. visit_label ( label) ) ; 
15291598            vis. visit_block ( blk) ; 
15301599        } 
1531-         ExprKind :: Gen ( _capture_by ,  body,  _kind,  decl_span)  => { 
1600+         ExprKind :: Gen ( capture_clause ,  body,  _kind,  decl_span)  => { 
15321601            vis. visit_block ( body) ; 
15331602            vis. visit_span ( decl_span) ; 
1603+             vis. visit_capture_by ( capture_clause) ; 
15341604        } 
15351605        ExprKind :: Await ( expr,  await_kw_span)  => { 
15361606            vis. visit_expr ( expr) ; 
@@ -1541,7 +1611,8 @@ pub fn noop_visit_expr<T: MutVisitor>(
15411611            vis. visit_expr ( er) ; 
15421612            vis. visit_span ( span) ; 
15431613        } 
1544-         ExprKind :: AssignOp ( _op,  el,  er)  => { 
1614+         ExprKind :: AssignOp ( Spanned  {  node :  _binop,  span } ,  el,  er)  => { 
1615+             vis. visit_span ( span) ; 
15451616            vis. visit_expr ( el) ; 
15461617            vis. visit_expr ( er) ; 
15471618        } 
@@ -1593,7 +1664,7 @@ pub fn noop_visit_expr<T: MutVisitor>(
15931664            fields. flat_map_in_place ( |field| vis. flat_map_expr_field ( field) ) ; 
15941665            match  rest { 
15951666                StructRest :: Base ( expr)  => vis. visit_expr ( expr) , 
1596-                 StructRest :: Rest ( _span )  => { } 
1667+                 StructRest :: Rest ( span )  => vis . visit_span ( span ) , 
15971668                StructRest :: None  => { } 
15981669            } 
15991670        } 
@@ -1626,6 +1697,7 @@ pub fn noop_flat_map_stmt<T: MutVisitor>(
16261697    vis :  & mut  T , 
16271698)  -> SmallVec < [ Stmt ;  1 ] >  { 
16281699    vis. visit_id ( & mut  id) ; 
1700+     vis. visit_span ( & mut  span) ; 
16291701    let  stmts:  SmallVec < _ >  = noop_flat_map_stmt_kind ( kind,  vis) 
16301702        . into_iter ( ) 
16311703        . map ( |kind| Stmt  {  id,  kind,  span } ) 
@@ -1636,7 +1708,6 @@ pub fn noop_flat_map_stmt<T: MutVisitor>(
16361708
16371709        ) ; 
16381710    } 
1639-     vis. visit_span ( & mut  span) ; 
16401711    stmts
16411712} 
16421713
0 commit comments