diff options
| author | Michael Goulet <michael@errs.io> | 2022-10-11 17:01:22 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-10-11 17:35:50 +0000 |
| commit | f9d3c8352660451cb14df831002eb1ec514e59e6 (patch) | |
| tree | d0382d37376d4ee515c7565bd9fe7aed0ddb0328 /compiler/rustc_parse/src/parser | |
| parent | cde693cf962f0f606e33eb21242f6bcd2d8d8b7a (diff) | |
| download | rust-f9d3c8352660451cb14df831002eb1ec514e59e6.tar.gz rust-f9d3c8352660451cb14df831002eb1ec514e59e6.zip | |
Fix let removal suggestion in struct
Diffstat (limited to 'compiler/rustc_parse/src/parser')
| -rw-r--r-- | compiler/rustc_parse/src/parser/item.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index e82044a89c4..ebcbc75ba32 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -1789,20 +1789,25 @@ impl<'a> Parser<'a> { } } else { let mut err = self.expected_ident_found(); - if let Some((ident, _)) = self.token.ident() && ident.as_str() == "let" { - self.bump(); // `let` - let span = self.prev_token.span.until(self.token.span); + if self.eat_keyword_noexpect(kw::Let) + && let removal_span = self.prev_token.span.until(self.token.span) + && let Ok(ident) = self.parse_ident_common(false) + // Cancel this error, we don't need it. + .map_err(|err| err.cancel()) + && self.token.kind == TokenKind::Colon + { err.span_suggestion( - span, - "remove the let, the `let` keyword is not allowed in struct field definitions", + removal_span, + "remove this `let` keyword", String::new(), Applicability::MachineApplicable, ); err.note("the `let` keyword is not allowed in `struct` fields"); err.note("see <https://doc.rust-lang.org/book/ch05-01-defining-structs.html> for more information"); err.emit(); - self.bump(); return Ok(ident); + } else { + self.restore_snapshot(snapshot); } err }; |
