.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[..]);
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
}
}
+ 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 => {
// 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,
);