@@ -1202,9 +1202,10 @@ macro_rules! common_visitor_and_walkers {
12021202            let  TyPat  {  id,  kind,  span,  tokens:  _ }  = tp; 
12031203            try_visit!( visit_id( vis,  id) ) ; 
12041204            match  kind { 
1205-                 TyPatKind :: Range ( start,  end,  _include_end)  => { 
1205+                 TyPatKind :: Range ( start,  end,  Spanned   {  span ,  node :   _include_end  } )  => { 
12061206                    visit_opt!( vis,  visit_anon_const,  start) ; 
12071207                    visit_opt!( vis,  visit_anon_const,  end) ; 
1208+                     try_visit!( visit_span( vis,  span) ) ; 
12081209                } 
12091210                TyPatKind :: Or ( variants)  => walk_list!( vis,  visit_ty_pat,  variants) , 
12101211                TyPatKind :: Err ( _)  => { } 
@@ -1523,16 +1524,26 @@ macro_rules! common_visitor_and_walkers {
15231524        } 
15241525
15251526        pub  fn  walk_inline_asm<$( $lt, ) ? V :  $Visitor$( <$lt>) ?>( vis:  & mut  V ,  asm:  & $( $lt) ? $( $mut) ? InlineAsm )  -> V :: Result  { 
1526-             // FIXME: Visit spans inside all this currently ignored stuff. 
15271527            let  InlineAsm  { 
15281528                asm_macro:  _, 
1529-                 template:  _ , 
1530-                 template_strs:  _ , 
1529+                 template, 
1530+                 template_strs, 
15311531                operands, 
1532-                 clobber_abis:  _ , 
1532+                 clobber_abis, 
15331533                options:  _, 
1534-                 line_spans:  _ , 
1534+                 line_spans, 
15351535            }  = asm; 
1536+             for  piece in template { 
1537+                 match  piece { 
1538+                     InlineAsmTemplatePiece :: String ( _str)  => { } 
1539+                     InlineAsmTemplatePiece :: Placeholder  {  operand_idx:  _,  modifier:  _,  span }  => { 
1540+                         try_visit!( visit_span( vis,  span) ) ; 
1541+                     } 
1542+                 } 
1543+             } 
1544+             for  ( _s1,  _s2,  span)  in template_strs { 
1545+                 try_visit!( visit_span( vis,  span) ) ; 
1546+             } 
15361547            for  ( op,  span)  in operands { 
15371548                match  op { 
15381549                    InlineAsmOperand :: In  {  expr,  reg:  _ } 
@@ -1553,6 +1564,12 @@ macro_rules! common_visitor_and_walkers {
15531564                } 
15541565                try_visit!( visit_span( vis,  span) ) ; 
15551566            } 
1567+             for  ( _s1,  span)  in clobber_abis { 
1568+                 try_visit!( visit_span( vis,  span) ) 
1569+             } 
1570+             for  span in line_spans { 
1571+                 try_visit!( visit_span( vis,  span) ) 
1572+             } 
15561573            V :: Result :: output( ) 
15571574        } 
15581575
@@ -1565,9 +1582,9 @@ macro_rules! common_visitor_and_walkers {
15651582            vis. visit_path( path) 
15661583        } 
15671584
1568-         // FIXME: visit the template exhaustively. 
15691585        pub  fn  walk_format_args<$( $lt, ) ? V :  $Visitor$( <$lt>) ?>( vis:  & mut  V ,  fmt:  & $( $lt) ? $( $mut) ? FormatArgs )  -> V :: Result  { 
1570-             let  FormatArgs  {  span,  template:  _,  arguments,  uncooked_fmt_str:  _,  is_source_literal:  _ }  = fmt; 
1586+             let  FormatArgs  {  span,  template,  arguments,  uncooked_fmt_str:  _,  is_source_literal:  _ }  = fmt; 
1587+ 
15711588            let  args = $( ${ ignore( $mut) }  arguments. all_args_mut( ) ) ? $( ${ ignore( $lt) }  arguments. all_args( ) ) ? ; 
15721589            for  FormatArgument  {  kind,  expr }  in args { 
15731590                match  kind { 
@@ -1578,9 +1595,58 @@ macro_rules! common_visitor_and_walkers {
15781595                } 
15791596                try_visit!( vis. visit_expr( expr) ) ; 
15801597            } 
1598+             for  piece in template { 
1599+                 match  piece { 
1600+                     FormatArgsPiece :: Literal ( _symbol)  => { } 
1601+                     FormatArgsPiece :: Placeholder ( placeholder)  => try_visit!( walk_format_placeholder( vis,  placeholder) ) , 
1602+                 } 
1603+             } 
15811604            visit_span( vis,  span) 
15821605        } 
15831606
1607+         fn  walk_format_placeholder<$( $lt, ) ? V :  $Visitor$( <$lt>) ?>( 
1608+             vis:  & mut  V , 
1609+             placeholder:  & $( $lt) ? $( $mut) ? FormatPlaceholder , 
1610+         )  -> V :: Result  { 
1611+             let  FormatPlaceholder  {  argument,  span,  format_options,  format_trait:  _ }  = placeholder; 
1612+             if  let  Some ( span)  = span { 
1613+                 try_visit!( visit_span( vis,  span) ) ; 
1614+             } 
1615+             let  FormatArgPosition  {  span,  index:  _,  kind:  _ }  = argument; 
1616+             if  let  Some ( span)  = span { 
1617+                 try_visit!( visit_span( vis,  span) ) ; 
1618+             } 
1619+             let  FormatOptions  { 
1620+                 width, 
1621+                 precision, 
1622+                 alignment:  _, 
1623+                 fill:  _, 
1624+                 sign:  _, 
1625+                 alternate:  _, 
1626+                 zero_pad:  _, 
1627+                 debug_hex:  _, 
1628+             }  = format_options; 
1629+             match  width { 
1630+                 None  => { } 
1631+                 Some ( FormatCount :: Literal ( _) )  => { } 
1632+                 Some ( FormatCount :: Argument ( FormatArgPosition  {  span,  index:  _,  kind:  _ } ) )  => { 
1633+                     if  let  Some ( span)  = span { 
1634+                         try_visit!( visit_span( vis,  span) ) ; 
1635+                     } 
1636+                 } 
1637+             } 
1638+             match  precision { 
1639+                 None  => { } 
1640+                 Some ( FormatCount :: Literal ( _) )  => { } 
1641+                 Some ( FormatCount :: Argument ( FormatArgPosition  {  span,  index:  _,  kind:  _ } ) )  => { 
1642+                     if  let  Some ( span)  = span { 
1643+                         try_visit!( visit_span( vis,  span) ) ; 
1644+                     } 
1645+                 } 
1646+             } 
1647+             V :: Result :: output( ) 
1648+         } 
1649+ 
15841650        pub  fn  walk_expr<$( $lt, ) ? V :  $Visitor$( <$lt>) ?>( vis:  & mut  V ,  expression:  & $( $lt) ? $( $mut) ? Expr )  -> V :: Result  { 
15851651            let  Expr  {  id,  kind,  span,  attrs,  tokens:  _ }  = expression; 
15861652            try_visit!( visit_id( vis,  id) ) ; 
@@ -1601,7 +1667,7 @@ macro_rules! common_visitor_and_walkers {
16011667                    try_visit!( visit_expr_fields( vis,  fields) ) ; 
16021668                    match  rest { 
16031669                        StructRest :: Base ( expr)  => try_visit!( vis. visit_expr( expr) ) , 
1604-                         StructRest :: Rest ( _span )  => { } 
1670+                         StructRest :: Rest ( span )  => try_visit! ( visit_span ( vis ,  span ) ) , 
16051671                        StructRest :: None  => { } 
16061672                    } 
16071673                } 
@@ -1688,7 +1754,8 @@ macro_rules! common_visitor_and_walkers {
16881754                    visit_opt!( vis,  visit_label,  opt_label) ; 
16891755                    try_visit!( vis. visit_block( block) ) ; 
16901756                } 
1691-                 ExprKind :: Gen ( _capt,  body,  _kind,  decl_span)  => { 
1757+                 ExprKind :: Gen ( capture_clause,  body,  _kind,  decl_span)  => { 
1758+                     try_visit!( vis. visit_capture_by( capture_clause) ) ; 
16921759                    try_visit!( vis. visit_block( body) ) ; 
16931760                    try_visit!( visit_span( vis,  decl_span) ) ; 
16941761                } 
@@ -1705,9 +1772,10 @@ macro_rules! common_visitor_and_walkers {
17051772                    try_visit!( vis. visit_expr( rhs) ) ; 
17061773                    try_visit!( visit_span( vis,  span) ) ; 
17071774                } 
1708-                 ExprKind :: AssignOp ( _op ,  left_expression,  right_expression)  => { 
1775+                 ExprKind :: AssignOp ( Spanned   {  span ,  node :  _  } ,  left_expression,  right_expression)  => { 
17091776                    try_visit!( vis. visit_expr( left_expression) ) ; 
17101777                    try_visit!( vis. visit_expr( right_expression) ) ; 
1778+                     try_visit!( visit_span( vis,  span) ) ; 
17111779                } 
17121780                ExprKind :: Field ( subexpression,  ident)  => { 
17131781                    try_visit!( vis. visit_expr( subexpression) ) ; 
0 commit comments