Suggest swapping the order of ref
and box
This commit is contained in:
parent
b29a1e00f8
commit
f4c2bdeec9
6 changed files with 55 additions and 2 deletions
|
@ -137,6 +137,14 @@ pub(crate) enum InvalidVariableDeclarationSub {
|
|||
UseLetNotVar(#[primary_span] Span),
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parse_switch_ref_box_order)]
|
||||
pub(crate) struct SwitchRefBoxOrder {
|
||||
#[primary_span]
|
||||
#[suggestion(applicability = "machine-applicable", code = "box ref")]
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parse_invalid_comparison_operator)]
|
||||
pub(crate) struct InvalidComparisonOperator {
|
||||
|
|
|
@ -5,8 +5,8 @@ use crate::errors::{
|
|||
ExpectedCommaAfterPatternField, GenericArgsInPatRequireTurbofishSyntax,
|
||||
InclusiveRangeExtraEquals, InclusiveRangeMatchArrow, InclusiveRangeNoEnd, InvalidMutInPattern,
|
||||
PatternOnWrongSideOfAt, RefMutOrderIncorrect, RemoveLet, RepeatedMutInPattern,
|
||||
TopLevelOrPatternNotAllowed, TopLevelOrPatternNotAllowedSugg, TrailingVertNotAllowed,
|
||||
UnexpectedLifetimeInPattern, UnexpectedVertVertBeforeFunctionParam,
|
||||
SwitchRefBoxOrder, TopLevelOrPatternNotAllowed, TopLevelOrPatternNotAllowedSugg,
|
||||
TrailingVertNotAllowed, UnexpectedLifetimeInPattern, UnexpectedVertVertBeforeFunctionParam,
|
||||
UnexpectedVertVertInPattern,
|
||||
};
|
||||
use crate::{maybe_recover_from_interpolated_ty_qpath, maybe_whole};
|
||||
|
@ -374,6 +374,12 @@ impl<'a> Parser<'a> {
|
|||
} else if self.eat_keyword(kw::Mut) {
|
||||
self.parse_pat_ident_mut(syntax_loc)?
|
||||
} else if self.eat_keyword(kw::Ref) {
|
||||
if self.check_keyword(kw::Box) {
|
||||
// Suggest `box ref` and quit parsing pattern to prevent series of
|
||||
// misguided diagnostics from later stages of the compiler.
|
||||
let span = self.prev_token.span.to(self.token.span);
|
||||
return Err(self.sess.create_err(SwitchRefBoxOrder { span }));
|
||||
}
|
||||
// Parse ref ident @ pat / ref mut ident @ pat
|
||||
let mutbl = self.parse_mutability();
|
||||
self.parse_pat_ident(BindingAnnotation(ByRef::Yes, mutbl), syntax_loc)?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue