Skip to content

Commit 1ec28f8

Browse files
ShE3pyfmease
andcommitted
Refactor PR rust-lang#119397
Co-authored-by: León Orell Valerian Liehr <[email protected]>
1 parent d114f47 commit 1ec28f8

File tree

2 files changed

+24
-30
lines changed

2 files changed

+24
-30
lines changed

compiler/rustc_parse/src/errors.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::borrow::Cow;
33
use rustc_ast::token::Token;
44
use rustc_ast::{Path, Visibility};
55
use rustc_errors::{
6-
AddToDiagnostic, Applicability, DiagCtxt, DiagnosticBuilder, IntoDiagnostic, Level, MultiSpan,
6+
AddToDiagnostic, Applicability, DiagCtxt, DiagnosticBuilder, IntoDiagnostic, Level,
77
SubdiagnosticMessage,
88
};
99
use rustc_macros::{Diagnostic, Subdiagnostic};
@@ -2382,7 +2382,7 @@ pub(crate) struct ExpectedCommaAfterPatternField {
23822382
#[diag(parse_unexpected_paren_in_range_pat)]
23832383
pub(crate) struct UnexpectedParenInRangePat {
23842384
#[primary_span]
2385-
pub span: MultiSpan,
2385+
pub span: Vec<Span>,
23862386
#[subdiagnostic]
23872387
pub sugg: UnexpectedParenInRangePatSugg,
23882388
}

compiler/rustc_parse/src/parser/pat.rs

+22-28
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
use super::{ForceCollect, Parser, PathStyle, TrailingToken};
22
use 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
};
1313
use crate::{maybe_recover_from_interpolated_ty_qpath, maybe_whole};
1414
use rustc_ast::mut_visit::{noop_visit_pat, MutVisitor};
@@ -19,7 +19,7 @@ use rustc_ast::{
1919
PatField, PatFieldsRest, PatKind, Path, QSelf, RangeEnd, RangeSyntax,
2020
};
2121
use rustc_ast_pretty::pprust;
22-
use rustc_errors::{Applicability, DiagnosticBuilder, MultiSpan, PResult};
22+
use rustc_errors::{Applicability, DiagnosticBuilder, PResult};
2323
use rustc_session::errors::ExprParenthesesNeeded;
2424
use rustc_span::source_map::{respan, Spanned};
2525
use 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

Comments
 (0)