diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-08-14 20:16:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-14 20:16:00 +0200 |
| commit | 13b8b6ede033a7bddb747417e4a145d99c0cbb37 (patch) | |
| tree | bd5265a69b04fac2001ed7b559278e68382e5fed | |
| parent | b8b3ead67a1518dbd0cffa2f128394dcb81c5145 (diff) | |
| parent | 59e406390c3c27ab3659d88dc025affc4ee93aba (diff) | |
| download | rust-13b8b6ede033a7bddb747417e4a145d99c0cbb37.tar.gz rust-13b8b6ede033a7bddb747417e4a145d99c0cbb37.zip | |
Rollup merge of #100253 - obeis:issue-100197, r=cjgillot
Recover from mutable variable declaration where `mut` is placed before `let` Closes #100197
| -rw-r--r-- | compiler/rustc_parse/src/parser/stmt.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/parser/issue-100197-mut-let.fixed | 6 | ||||
| -rw-r--r-- | src/test/ui/parser/issue-100197-mut-let.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/parser/issue-100197-mut-let.stderr | 8 |
4 files changed, 33 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/stmt.rs b/compiler/rustc_parse/src/parser/stmt.rs index 6990d0782b7..d8b39a406cc 100644 --- a/compiler/rustc_parse/src/parser/stmt.rs +++ b/compiler/rustc_parse/src/parser/stmt.rs @@ -55,6 +55,19 @@ impl<'a> Parser<'a> { return Ok(Some(stmt.into_inner())); } + if self.token.is_keyword(kw::Mut) && self.is_keyword_ahead(1, &[kw::Let]) { + self.bump(); + let mut_let_span = lo.to(self.token.span); + self.struct_span_err(mut_let_span, "invalid variable declaration") + .span_suggestion( + mut_let_span, + "switch the order of `mut` and `let`", + "let mut", + Applicability::MaybeIncorrect, + ) + .emit(); + } + Ok(Some(if self.token.is_keyword(kw::Let) { self.parse_local_mk(lo, attrs, capture_semi, force_collect)? } else if self.is_kw_followed_by_ident(kw::Mut) { diff --git a/src/test/ui/parser/issue-100197-mut-let.fixed b/src/test/ui/parser/issue-100197-mut-let.fixed new file mode 100644 index 00000000000..5a895622200 --- /dev/null +++ b/src/test/ui/parser/issue-100197-mut-let.fixed @@ -0,0 +1,6 @@ +// run-rustfix + +fn main() { + let mut _x = 123; + //~^ ERROR invalid variable declaration +} diff --git a/src/test/ui/parser/issue-100197-mut-let.rs b/src/test/ui/parser/issue-100197-mut-let.rs new file mode 100644 index 00000000000..71103813a6e --- /dev/null +++ b/src/test/ui/parser/issue-100197-mut-let.rs @@ -0,0 +1,6 @@ +// run-rustfix + +fn main() { + mut let _x = 123; + //~^ ERROR invalid variable declaration +} diff --git a/src/test/ui/parser/issue-100197-mut-let.stderr b/src/test/ui/parser/issue-100197-mut-let.stderr new file mode 100644 index 00000000000..86658e4f39f --- /dev/null +++ b/src/test/ui/parser/issue-100197-mut-let.stderr @@ -0,0 +1,8 @@ +error: invalid variable declaration + --> $DIR/issue-100197-mut-let.rs:4:5 + | +LL | mut let _x = 123; + | ^^^^^^^ help: switch the order of `mut` and `let`: `let mut` + +error: aborting due to previous error + |
