Auto merge of #103636 - chenyukang:yukang/fix-103587-sugg-if-let, r=jackh276,davidtwco
Recover from common if let syntax mistakes/typos Fixes #103587
This commit is contained in:
commit
11fa0850f0
11 changed files with 184 additions and 4 deletions
|
@ -420,6 +420,15 @@ pub(crate) struct ExpectedExpressionFoundLet {
|
|||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parser_expect_eq_instead_of_eqeq)]
|
||||
pub(crate) struct ExpectedEqForLetExpr {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
#[suggestion(applicability = "maybe-incorrect", code = "=", style = "verbose")]
|
||||
pub sugg_span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parser_expected_else_block)]
|
||||
pub(crate) struct ExpectedElseBlock {
|
||||
|
|
|
@ -9,9 +9,9 @@ use crate::errors::{
|
|||
ArrayBracketsInsteadOfSpaces, ArrayBracketsInsteadOfSpacesSugg, AsyncMoveOrderIncorrect,
|
||||
BinaryFloatLiteralNotSupported, BracesForStructLiteral, CatchAfterTry, CommaAfterBaseStruct,
|
||||
ComparisonInterpretedAsGeneric, ComparisonOrShiftInterpretedAsGenericSugg,
|
||||
DoCatchSyntaxRemoved, DotDotDot, EqFieldInit, ExpectedElseBlock, ExpectedExpressionFoundLet,
|
||||
FieldExpressionWithGeneric, FloatLiteralRequiresIntegerPart, FoundExprWouldBeStmt,
|
||||
HexadecimalFloatLiteralNotSupported, IfExpressionMissingCondition,
|
||||
DoCatchSyntaxRemoved, DotDotDot, EqFieldInit, ExpectedElseBlock, ExpectedEqForLetExpr,
|
||||
ExpectedExpressionFoundLet, FieldExpressionWithGeneric, FloatLiteralRequiresIntegerPart,
|
||||
FoundExprWouldBeStmt, HexadecimalFloatLiteralNotSupported, IfExpressionMissingCondition,
|
||||
IfExpressionMissingThenBlock, IfExpressionMissingThenBlockSub, IntLiteralTooLarge,
|
||||
InvalidBlockMacroSegment, InvalidComparisonOperator, InvalidComparisonOperatorSub,
|
||||
InvalidFloatLiteralSuffix, InvalidFloatLiteralWidth, InvalidIntLiteralWidth,
|
||||
|
@ -2329,7 +2329,15 @@ impl<'a> Parser<'a> {
|
|||
RecoverColon::Yes,
|
||||
CommaRecoveryMode::LikelyTuple,
|
||||
)?;
|
||||
self.expect(&token::Eq)?;
|
||||
if self.token == token::EqEq {
|
||||
self.sess.emit_err(ExpectedEqForLetExpr {
|
||||
span: self.token.span,
|
||||
sugg_span: self.token.span,
|
||||
});
|
||||
self.bump();
|
||||
} else {
|
||||
self.expect(&token::Eq)?;
|
||||
}
|
||||
let expr = self.with_res(self.restrictions | Restrictions::NO_STRUCT_LITERAL, |this| {
|
||||
this.parse_assoc_expr_with(1 + prec_let_scrutinee_needs_par(), None.into())
|
||||
})?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue