@@ -1334,31 +1334,25 @@ impl<'a> Parser<'a> {
13341334 pub ( super ) fn recover_parens_around_for_head (
13351335 & mut self ,
13361336 pat : P < Pat > ,
1337- expr : & Expr ,
13381337 begin_paren : Option < Span > ,
13391338 ) -> P < Pat > {
13401339 match ( & self . token . kind , begin_paren) {
13411340 ( token:: CloseDelim ( token:: Paren ) , Some ( begin_par_sp) ) => {
13421341 self . bump ( ) ;
13431342
1344- let pat_str = self
1345- // Remove the `(` from the span of the pattern:
1346- . span_to_snippet ( pat. span . trim_start ( begin_par_sp) . unwrap ( ) )
1347- . unwrap_or_else ( |_| pprust:: pat_to_string ( & pat) ) ;
1348-
1349- let sp = MultiSpan :: from_spans ( vec ! [ begin_par_sp, self . prev_token. span] ) ;
1350-
1351- self . struct_span_err ( sp, "unexpected parenthesis surrounding `for` loop head" )
1352- . span_suggestion (
1353- begin_par_sp. to ( self . prev_token . span ) ,
1354- "remove parenthesis in `for` loop" ,
1355- format ! ( "{} in {}" , pat_str, pprust:: expr_to_string( & expr) ) ,
1356- // With e.g. `for (x) in y)` this would replace `(x) in y)`
1357- // with `x) in y)` which is syntactically invalid.
1358- // However, this is prevented before we get here.
1359- Applicability :: MachineApplicable ,
1360- )
1361- . emit ( ) ;
1343+ self . struct_span_err (
1344+ MultiSpan :: from_spans ( vec ! [ begin_par_sp, self . prev_token. span] ) ,
1345+ "unexpected parenthesis surrounding `for` loop head" ,
1346+ )
1347+ . multipart_suggestion (
1348+ "remove parenthesis in `for` loop" ,
1349+ vec ! [ ( begin_par_sp, String :: new( ) ) , ( self . prev_token. span, String :: new( ) ) ] ,
1350+ // With e.g. `for (x) in y)` this would replace `(x) in y)`
1351+ // with `x) in y)` which is syntactically invalid.
1352+ // However, this is prevented before we get here.
1353+ Applicability :: MachineApplicable ,
1354+ )
1355+ . emit ( ) ;
13621356
13631357 // Unwrap `(pat)` into `pat` to avoid the `unused_parens` lint.
13641358 pat. and_then ( |pat| match pat. kind {
0 commit comments