Skip to content

Commit

Permalink
Rollup merge of rust-lang#133060 - tyrone-wu:removelet-span-suggestio…
Browse files Browse the repository at this point in the history
…n, r=jieyouxu

Trim whitespace in RemoveLet primary span

Separate `RemoveLet` span into primary span for `let` and removal suggestion span for `let `, so that primary span does not include whitespace.

Fixes: rust-lang#133031
  • Loading branch information
jieyouxu authored Nov 17, 2024
2 parents 2f62fd3 + dd557c9 commit 0b157e8
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 15 deletions.
3 changes: 2 additions & 1 deletion compiler/rustc_parse/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -650,8 +650,9 @@ pub(crate) struct LeftArrowOperator {
#[diag(parse_remove_let)]
pub(crate) struct RemoveLet {
#[primary_span]
#[suggestion(applicability = "machine-applicable", code = "", style = "verbose")]
pub span: Span,
#[suggestion(applicability = "machine-applicable", code = "", style = "verbose")]
pub suggestion: Span,
}

#[derive(Diagnostic)]
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_parse/src/parser/pat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -685,7 +685,7 @@ impl<'a> Parser<'a> {
self.bump();
// Trim extra space after the `let`
let span = lo.with_hi(self.token.span.lo());
self.dcx().emit_err(RemoveLet { span });
self.dcx().emit_err(RemoveLet { span: lo, suggestion: span });
lo = self.token.span;
}

Expand Down
13 changes: 13 additions & 0 deletions tests/ui/parser/unnecessary-let.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//@ run-rustfix

fn main() {
for _x in [1, 2, 3] {}
//~^ ERROR expected pattern, found `let`
//~| ERROR missing `in` in `for` loop

match 1 {
1 => {}
//~^ ERROR expected pattern, found `let`
_ => {}
}
}
4 changes: 3 additions & 1 deletion tests/ui/parser/unnecessary-let.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
//@ run-rustfix

fn main() {
for let x of [1, 2, 3] {}
for let _x of [1, 2, 3] {}
//~^ ERROR expected pattern, found `let`
//~| ERROR missing `in` in `for` loop

Expand Down
24 changes: 12 additions & 12 deletions tests/ui/parser/unnecessary-let.stderr
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
error: expected pattern, found `let`
--> $DIR/unnecessary-let.rs:2:9
--> $DIR/unnecessary-let.rs:4:9
|
LL | for let x of [1, 2, 3] {}
| ^^^^
LL | for let _x of [1, 2, 3] {}
| ^^^
|
help: remove the unnecessary `let` keyword
|
LL - for let x of [1, 2, 3] {}
LL + for x of [1, 2, 3] {}
LL - for let _x of [1, 2, 3] {}
LL + for _x of [1, 2, 3] {}
|

error: missing `in` in `for` loop
--> $DIR/unnecessary-let.rs:2:15
--> $DIR/unnecessary-let.rs:4:16
|
LL | for let x of [1, 2, 3] {}
| ^^
LL | for let _x of [1, 2, 3] {}
| ^^
|
help: try using `in` here instead
|
LL | for let x in [1, 2, 3] {}
| ~~
LL | for let _x in [1, 2, 3] {}
| ~~

error: expected pattern, found `let`
--> $DIR/unnecessary-let.rs:7:9
--> $DIR/unnecessary-let.rs:9:9
|
LL | let 1 => {}
| ^^^^
| ^^^
|
help: remove the unnecessary `let` keyword
|
Expand Down

0 comments on commit 0b157e8

Please sign in to comment.