Skip to content
Permalink
Browse files

review comments

  • Loading branch information...
estebank committed Apr 11, 2019
1 parent ac037c1 commit 9b6b3d618c16976a273cfd4f95408eef37e6c82e
Showing with 17 additions and 18 deletions.
  1. +15 −16 src/libsyntax/parse/parser.rs
  2. +2 −2 src/test/ui/parser/recover-missing-semi.stderr
@@ -796,10 +796,6 @@ impl<'a> Parser<'a> {
.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 @@ impl<'a> Parser<'a> {
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,14 +851,28 @@ impl<'a> Parser<'a> {
}
}

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 => {
// The spans are in different lines, expected `;` and found `let` or `return`.
// 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,
);
@@ -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;
| ^^^^^^

0 comments on commit 9b6b3d6

Please sign in to comment.
You can’t perform that action at this time.