@@ -714,7 +714,8 @@ impl<'a> Parser<'a> {
714
714
// For backward compatibility, `(..)` is a tuple pattern as well.
715
715
let paren_pattern =
716
716
fields. len ( ) == 1 && !( matches ! ( trailing_comma, Trailing :: Yes ) || fields[ 0 ] . is_rest ( ) ) ;
717
- if paren_pattern {
717
+
718
+ let pat = if paren_pattern {
718
719
let pat = fields. into_iter ( ) . next ( ) . unwrap ( ) ;
719
720
let close_paren = self . prev_token . span ;
720
721
@@ -732,7 +733,7 @@ impl<'a> Parser<'a> {
732
733
} ,
733
734
} ) ;
734
735
735
- self . parse_pat_range_begin_with ( begin. clone ( ) , form)
736
+ self . parse_pat_range_begin_with ( begin. clone ( ) , form) ?
736
737
}
737
738
// recover ranges with parentheses around the `(start)..`
738
739
PatKind :: Err ( guar)
@@ -747,15 +748,20 @@ impl<'a> Parser<'a> {
747
748
} ,
748
749
} ) ;
749
750
750
- self . parse_pat_range_begin_with ( self . mk_expr_err ( pat. span , * guar) , form)
751
+ self . parse_pat_range_begin_with ( self . mk_expr_err ( pat. span , * guar) , form) ?
751
752
}
752
753
753
754
// (pat) with optional parentheses
754
- _ => Ok ( PatKind :: Paren ( pat) ) ,
755
+ _ => PatKind :: Paren ( pat) ,
755
756
}
756
757
} else {
757
- Ok ( PatKind :: Tuple ( fields) )
758
- }
758
+ PatKind :: Tuple ( fields)
759
+ } ;
760
+
761
+ Ok ( match self . maybe_recover_trailing_expr ( open_paren. to ( self . prev_token . span ) , false ) {
762
+ None => pat,
763
+ Some ( guar) => PatKind :: Err ( guar)
764
+ } )
759
765
}
760
766
761
767
/// Parse a mutable binding with the `mut` token already eaten.
0 commit comments