11use super :: { ForceCollect , Parser , PathStyle , TrailingToken } ;
22use crate :: errors:: {
3- AmbiguousRangePattern , BoxNotPat , DotDotDotForRemainingFields ,
4- DotDotDotRangeToPatternNotAllowed , DotDotDotRestPattern , EnumPatternInsteadOfIdentifier ,
5- ExpectedBindingLeftOfAt , ExpectedCommaAfterPatternField ,
6- GenericArgsInPatRequireTurbofishSyntax , InclusiveRangeExtraEquals , InclusiveRangeMatchArrow ,
7- InclusiveRangeNoEnd , InvalidMutInPattern , PatternOnWrongSideOfAt , RefMutOrderIncorrect ,
8- RemoveLet , RepeatedMutInPattern , SwitchRefBoxOrder , TopLevelOrPatternNotAllowed ,
9- TopLevelOrPatternNotAllowedSugg , TrailingVertNotAllowed , UnexpectedLifetimeInPattern ,
10- UnexpectedParenInRangePat , UnexpectedParenInRangePatSugg ,
11- UnexpectedVertVertBeforeFunctionParam , UnexpectedVertVertInPattern ,
3+ self , AmbiguousRangePattern , DotDotDotForRemainingFields , DotDotDotRangeToPatternNotAllowed ,
4+ DotDotDotRestPattern , EnumPatternInsteadOfIdentifier , ExpectedBindingLeftOfAt ,
5+ ExpectedCommaAfterPatternField , GenericArgsInPatRequireTurbofishSyntax ,
6+ InclusiveRangeExtraEquals , InclusiveRangeMatchArrow , InclusiveRangeNoEnd , InvalidMutInPattern ,
7+ PatternOnWrongSideOfAt , RefMutOrderIncorrect , RemoveLet , RepeatedMutInPattern ,
8+ SwitchRefBoxOrder , TopLevelOrPatternNotAllowed , TopLevelOrPatternNotAllowedSugg ,
9+ TrailingVertNotAllowed , UnexpectedLifetimeInPattern , UnexpectedParenInRangePat ,
10+ UnexpectedParenInRangePatSugg , UnexpectedVertVertBeforeFunctionParam ,
11+ UnexpectedVertVertInPattern ,
1212} ;
1313use crate :: { maybe_recover_from_interpolated_ty_qpath, maybe_whole} ;
1414use rustc_ast:: mut_visit:: { noop_visit_pat, MutVisitor } ;
@@ -19,7 +19,7 @@ use rustc_ast::{
1919 PatField , PatFieldsRest , PatKind , Path , QSelf , RangeEnd , RangeSyntax ,
2020} ;
2121use rustc_ast_pretty:: pprust;
22- use rustc_errors:: { Applicability , DiagnosticBuilder , MultiSpan , PResult } ;
22+ use rustc_errors:: { Applicability , DiagnosticBuilder , PResult } ;
2323use rustc_session:: errors:: ExprParenthesesNeeded ;
2424use rustc_span:: source_map:: { respan, Spanned } ;
2525use rustc_span:: symbol:: { kw, sym, Ident } ;
@@ -604,7 +604,7 @@ impl<'a> Parser<'a> {
604604 && let Some ( form) = self . parse_range_end ( ) =>
605605 {
606606 self . dcx ( ) . emit_err ( UnexpectedParenInRangePat {
607- span : MultiSpan :: from_spans ( vec ! [ open_paren, close_paren] ) ,
607+ span : vec ! [ open_paren, close_paren] ,
608608 sugg : UnexpectedParenInRangePatSugg {
609609 start_span : open_paren,
610610 end_span : close_paren,
@@ -754,11 +754,8 @@ impl<'a> Parser<'a> {
754754 ) -> PResult < ' a , PatKind > {
755755 // recover from `(`
756756 let open_paren = ( self . may_recover ( )
757- && self . token . kind == token:: OpenDelim ( Delimiter :: Parenthesis ) )
758- . then ( || {
759- self . bump ( ) ;
760- self . prev_token . span
761- } ) ;
757+ && self . eat_noexpect ( & token:: OpenDelim ( Delimiter :: Parenthesis ) ) )
758+ . then_some ( self . prev_token . span ) ;
762759
763760 let end = if self . is_pat_range_end_start ( 0 ) {
764761 // Parsing e.g. `X..=Y`.
@@ -772,13 +769,13 @@ impl<'a> Parser<'a> {
772769 None
773770 } ;
774771
775- if let Some ( span ) = open_paren {
772+ if let Some ( open_paren ) = open_paren {
776773 self . expect ( & token:: CloseDelim ( Delimiter :: Parenthesis ) ) ?;
777774
778775 self . dcx ( ) . emit_err ( UnexpectedParenInRangePat {
779- span : MultiSpan :: from_spans ( vec ! [ span , self . prev_token. span] ) ,
776+ span : vec ! [ open_paren , self . prev_token. span] ,
780777 sugg : UnexpectedParenInRangePatSugg {
781- start_span : span ,
778+ start_span : open_paren ,
782779 end_span : self . prev_token . span ,
783780 } ,
784781 } ) ;
@@ -825,25 +822,22 @@ impl<'a> Parser<'a> {
825822 fn parse_pat_range_to ( & mut self , mut re : Spanned < RangeEnd > ) -> PResult < ' a , PatKind > {
826823 // recover from `(`
827824 let open_paren = ( self . may_recover ( )
828- && self . token . kind == token:: OpenDelim ( Delimiter :: Parenthesis ) )
829- . then ( || {
830- self . bump ( ) ;
831- self . prev_token . span
832- } ) ;
825+ && self . eat_noexpect ( & token:: OpenDelim ( Delimiter :: Parenthesis ) ) )
826+ . then_some ( self . prev_token . span ) ;
833827
834828 let end = self . parse_pat_range_end ( ) ?;
835829 if let RangeEnd :: Included ( syn @ RangeSyntax :: DotDotDot ) = & mut re. node {
836830 * syn = RangeSyntax :: DotDotEq ;
837831 self . dcx ( ) . emit_err ( DotDotDotRangeToPatternNotAllowed { span : re. span } ) ;
838832 }
839833
840- if let Some ( span ) = open_paren {
834+ if let Some ( open_paren ) = open_paren {
841835 self . expect ( & token:: CloseDelim ( Delimiter :: Parenthesis ) ) ?;
842836
843837 self . dcx ( ) . emit_err ( UnexpectedParenInRangePat {
844- span : MultiSpan :: from_spans ( vec ! [ span , self . prev_token. span] ) ,
838+ span : vec ! [ open_paren , self . prev_token. span] ,
845839 sugg : UnexpectedParenInRangePatSugg {
846- start_span : span ,
840+ start_span : open_paren ,
847841 end_span : self . prev_token . span ,
848842 } ,
849843 } ) ;
@@ -1013,7 +1007,7 @@ impl<'a> Parser<'a> {
10131007
10141008 if self . isnt_pattern_start ( ) {
10151009 let descr = super :: token_descr ( & self . token ) ;
1016- self . dcx ( ) . emit_err ( BoxNotPat {
1010+ self . dcx ( ) . emit_err ( errors :: BoxNotPat {
10171011 span : self . token . span ,
10181012 kw : box_span,
10191013 lo : box_span. shrink_to_lo ( ) ,
0 commit comments