about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser/diagnostics.rs
diff options
context:
space:
mode:
authorsjwang05 <63834813+sjwang05@users.noreply.github.com>2023-10-27 15:14:55 -0700
committersjwang05 <63834813+sjwang05@users.noreply.github.com>2023-12-26 20:59:14 -0800
commit97cf1c87bd98c13f4de91f7afbc971dba829ac92 (patch)
tree31444bc560707e904eb92f20262d97268664edc3 /compiler/rustc_parse/src/parser/diagnostics.rs
parented086d86b8b224f7df2da09cf48ac2a654bf841e (diff)
downloadrust-97cf1c87bd98c13f4de91f7afbc971dba829ac92.tar.gz
rust-97cf1c87bd98c13f4de91f7afbc971dba829ac92.zip
Suggest `=>` --> `>=` in conditions
Diffstat (limited to 'compiler/rustc_parse/src/parser/diagnostics.rs')
-rw-r--r--compiler/rustc_parse/src/parser/diagnostics.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs
index 2a8eb6edd23..8803b243aa8 100644
--- a/compiler/rustc_parse/src/parser/diagnostics.rs
+++ b/compiler/rustc_parse/src/parser/diagnostics.rs
@@ -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(