Skip to content

Commit 9b6b3d6

Browse files
committed
review comments
1 parent ac037c1 commit 9b6b3d6

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

src/libsyntax/parse/parser.rs

+15-16
Original file line numberDiff line numberDiff line change
@@ -796,10 +796,6 @@ impl<'a> Parser<'a> {
796796
.chain(inedible.iter().map(|x| TokenType::Token(x.clone())))
797797
.chain(self.expected_tokens.iter().cloned())
798798
.collect::<Vec<_>>();
799-
let expects_semi = expected.iter().any(|t| match t {
800-
TokenType::Token(token::Semi) => true,
801-
_ => false,
802-
});
803799
expected.sort_by_cached_key(|x| x.to_string());
804800
expected.dedup();
805801
let expect = tokens_to_string(&expected[..]);
@@ -839,17 +835,6 @@ impl<'a> Parser<'a> {
839835
Applicability::MaybeIncorrect,
840836
);
841837
}
842-
let is_semi_suggestable = expects_semi && (
843-
self.token.is_keyword(keywords::Break) ||
844-
self.token.is_keyword(keywords::Continue) ||
845-
self.token.is_keyword(keywords::For) ||
846-
self.token.is_keyword(keywords::If) ||
847-
self.token.is_keyword(keywords::Let) ||
848-
self.token.is_keyword(keywords::Loop) ||
849-
self.token.is_keyword(keywords::Match) ||
850-
self.token.is_keyword(keywords::Return) ||
851-
self.token.is_keyword(keywords::While)
852-
);
853838
let sp = if self.token == token::Token::Eof {
854839
// This is EOF, don't want to point at the following char, but rather the last token
855840
self.prev_span
@@ -866,14 +851,28 @@ impl<'a> Parser<'a> {
866851
}
867852
}
868853

854+
let is_semi_suggestable = expected.iter().any(|t| match t {
855+
TokenType::Token(token::Semi) => true, // we expect a `;` here
856+
_ => false,
857+
}) && ( // a `;` would be expected before the current keyword
858+
self.token.is_keyword(keywords::Break) ||
859+
self.token.is_keyword(keywords::Continue) ||
860+
self.token.is_keyword(keywords::For) ||
861+
self.token.is_keyword(keywords::If) ||
862+
self.token.is_keyword(keywords::Let) ||
863+
self.token.is_keyword(keywords::Loop) ||
864+
self.token.is_keyword(keywords::Match) ||
865+
self.token.is_keyword(keywords::Return) ||
866+
self.token.is_keyword(keywords::While)
867+
);
869868
let cm = self.sess.source_map();
870869
match (cm.lookup_line(self.span.lo()), cm.lookup_line(sp.lo())) {
871870
(Ok(ref a), Ok(ref b)) if a.line != b.line && is_semi_suggestable => {
872871
// The spans are in different lines, expected `;` and found `let` or `return`.
873872
// High likelihood that it is only a missing `;`.
874873
err.span_suggestion_short(
875874
label_sp,
876-
"missing semicolon here",
875+
"a semicolon may be missing here",
877876
";".to_string(),
878877
Applicability::MaybeIncorrect,
879878
);

src/test/ui/parser/recover-missing-semi.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ error: expected one of `.`, `;`, `?`, or an operator, found `let`
22
--> $DIR/recover-missing-semi.rs:4:5
33
|
44
LL | let _: usize = ()
5-
| - help: missing semicolon here
5+
| - help: a semicolon may be missing here
66
LL |
77
LL | let _ = 3;
88
| ^^^
@@ -11,7 +11,7 @@ error: expected one of `.`, `;`, `?`, or an operator, found `return`
1111
--> $DIR/recover-missing-semi.rs:11:5
1212
|
1313
LL | let _: usize = ()
14-
| - help: missing semicolon here
14+
| - help: a semicolon may be missing here
1515
LL |
1616
LL | return 3;
1717
| ^^^^^^

0 commit comments

Comments
 (0)