Suggest let for possible binding with ty

This commit is contained in:
yukang 2023-05-03 11:46:34 +08:00
parent ad6b20bf52
commit 0bb43c63c3
9 changed files with 61 additions and 12 deletions

View file

@ -399,6 +399,23 @@ impl<'a> Parser<'a> {
}
}
}
// we suggest add the missing `let` before the identifier
// `a: Ty = 1` -> `let a: Ty = 1`
if self.token == token::Colon {
let prev_span = self.prev_token.span.shrink_to_lo();
let snapshot = self.create_snapshot_for_diagnostic();
self.bump();
let res = self.parse_ty();
if res.is_ok() && self.token == token::Eq {
err.span_suggestion_verbose(
prev_span,
"you might have meant to introduce a new binding",
"let ".to_string(),
Applicability::MaybeIncorrect,
);
}
self.restore_snapshot(snapshot);
}
if let Some(recovered_ident) = recovered_ident && recover {
err.emit();

View file

@ -555,7 +555,6 @@ impl<'a> Parser<'a> {
if self.token == token::Colon {
// if next token is following a colon, it's likely a path
// and we can suggest a path separator
let ident_span = self.prev_token.span;
self.bump();
if self.token.span.lo() == self.prev_token.span.hi() {
err.span_suggestion_verbose(
@ -565,14 +564,6 @@ impl<'a> Parser<'a> {
Applicability::MaybeIncorrect,
);
}
if self.look_ahead(1, |token| token == &token::Eq) {
err.span_suggestion_verbose(
ident_span.shrink_to_lo(),
"you might have meant to introduce a new binding",
"let ",
Applicability::MaybeIncorrect,
);
}
if self.sess.unstable_features.is_nightly_build() {
// FIXME(Nilstrieb): Remove this again after a few months.
err.note("type ascription syntax has been removed, see issue #101728 <https://github.com/rust-lang/rust/issues/101728>");