Suggest => --> >= in conditions

This commit is contained in:
sjwang05 2023-10-27 15:14:55 -07:00
parent ed086d86b8
commit 97cf1c87bd
No known key found for this signature in database
GPG key ID: 8725BCA68FE25D6C
6 changed files with 230 additions and 0 deletions

View file

@ -610,6 +610,26 @@ impl<'a> Parser<'a> {
// FIXME: translation requires list formatting (for `expect`)
let mut err = self.struct_span_err(self.token.span, msg_exp);
// Look for usages of '=>' where '>=' was probably intended
if self.token == token::FatArrow
&& expected
.iter()
.any(|tok| matches!(tok, TokenType::Operator | TokenType::Token(TokenKind::Le)))
&& !expected.iter().any(|tok| {
matches!(
tok,
TokenType::Token(TokenKind::FatArrow) | TokenType::Token(TokenKind::Comma)
)
})
{
err.span_suggestion(
self.token.span,
"you might have meant to write a \"greater than or equal to\" comparison",
">=",
Applicability::MaybeIncorrect,
);
}
if let TokenKind::Ident(symbol, _) = &self.prev_token.kind {
if ["def", "fun", "func", "function"].contains(&symbol.as_str()) {
err.span_suggestion_short(

View file

@ -2432,6 +2432,7 @@ impl<'a> Parser<'a> {
}
} else {
let attrs = self.parse_outer_attributes()?; // For recovery.
let maybe_fatarrow = self.token.clone();
let block = if self.check(&token::OpenDelim(Delimiter::Brace)) {
self.parse_block()?
} else {
@ -2456,6 +2457,15 @@ impl<'a> Parser<'a> {
"you likely meant to continue parsing the let-chain starting here",
);
} else {
// Look for usages of '=>' where '>=' might be intended
if maybe_fatarrow.kind == token::FatArrow {
err.span_suggestion(
maybe_fatarrow.span,
"you might have meant to write a \"greater than or equal to\" comparison",
">=",
Applicability::MaybeIncorrect,
);
}
err.span_note(
cond_span,
"the `if` expression is missing a block after this condition",