]> git.lizzy.rs Git - rust.git/commitdiff
review comments
authorEsteban Küber <esteban@kuber.com.ar>
Thu, 11 Apr 2019 21:24:31 +0000 (14:24 -0700)
committerEsteban Küber <esteban@kuber.com.ar>
Thu, 11 Apr 2019 21:45:23 +0000 (14:45 -0700)
src/libsyntax/parse/parser.rs
src/test/ui/parser/recover-missing-semi.stderr

index d2875a5f27551e35ebbf18b849de09e9c3e0dda9..7992867692e3937125da82c1d8e1cc472c8ce456 100644 (file)
@@ -796,10 +796,6 @@ fn tokens_to_string(tokens: &[TokenType]) -> String {
                 .chain(inedible.iter().map(|x| TokenType::Token(x.clone())))
                 .chain(self.expected_tokens.iter().cloned())
                 .collect::<Vec<_>>();
-            let expects_semi = expected.iter().any(|t| match t {
-                TokenType::Token(token::Semi) => true,
-                _ => false,
-            });
             expected.sort_by_cached_key(|x| x.to_string());
             expected.dedup();
             let expect = tokens_to_string(&expected[..]);
@@ -839,17 +835,6 @@ fn tokens_to_string(tokens: &[TokenType]) -> String {
                     Applicability::MaybeIncorrect,
                 );
             }
-            let is_semi_suggestable = expects_semi && (
-                self.token.is_keyword(keywords::Break) ||
-                self.token.is_keyword(keywords::Continue) ||
-                self.token.is_keyword(keywords::For) ||
-                self.token.is_keyword(keywords::If) ||
-                self.token.is_keyword(keywords::Let) ||
-                self.token.is_keyword(keywords::Loop) ||
-                self.token.is_keyword(keywords::Match) ||
-                self.token.is_keyword(keywords::Return) ||
-                self.token.is_keyword(keywords::While)
-            );
             let sp = if self.token == token::Token::Eof {
                 // This is EOF, don't want to point at the following char, but rather the last token
                 self.prev_span
@@ -866,6 +851,20 @@ fn tokens_to_string(tokens: &[TokenType]) -> String {
                 }
             }
 
+            let is_semi_suggestable = expected.iter().any(|t| match t {
+                TokenType::Token(token::Semi) => true, // we expect a `;` here
+                _ => false,
+            }) && ( // a `;` would be expected before the current keyword
+                self.token.is_keyword(keywords::Break) ||
+                self.token.is_keyword(keywords::Continue) ||
+                self.token.is_keyword(keywords::For) ||
+                self.token.is_keyword(keywords::If) ||
+                self.token.is_keyword(keywords::Let) ||
+                self.token.is_keyword(keywords::Loop) ||
+                self.token.is_keyword(keywords::Match) ||
+                self.token.is_keyword(keywords::Return) ||
+                self.token.is_keyword(keywords::While)
+            );
             let cm = self.sess.source_map();
             match (cm.lookup_line(self.span.lo()), cm.lookup_line(sp.lo())) {
                 (Ok(ref a), Ok(ref b)) if a.line != b.line && is_semi_suggestable => {
@@ -873,7 +872,7 @@ fn tokens_to_string(tokens: &[TokenType]) -> String {
                     // High likelihood that it is only a missing `;`.
                     err.span_suggestion_short(
                         label_sp,
-                        "missing semicolon here",
+                        "a semicolon may be missing here",
                         ";".to_string(),
                         Applicability::MaybeIncorrect,
                     );
index 25ce408d8b25af15d690e577f98ab8719c3bc09b..99339e4dd5025c8d9845e738633374b59f9b48d2 100644 (file)
@@ -2,7 +2,7 @@ error: expected one of `.`, `;`, `?`, or an operator, found `let`
   --> $DIR/recover-missing-semi.rs:4:5
    |
 LL |     let _: usize = ()
-   |                      - help: missing semicolon here
+   |                      - help: a semicolon may be missing here
 LL |
 LL |     let _ = 3;
    |     ^^^
@@ -11,7 +11,7 @@ error: expected one of `.`, `;`, `?`, or an operator, found `return`
   --> $DIR/recover-missing-semi.rs:11:5
    |
 LL |     let _: usize = ()
-   |                      - help: missing semicolon here
+   |                      - help: a semicolon may be missing here
 LL |
 LL |     return 3;
    |     ^^^^^^