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: #133031

Signed-off-by: Tyrone Wu <wudevelops@gmail.com>
This commit is contained in:
Tyrone Wu 2024-11-15 02:27:51 +00:00
parent c82e0dff84
commit dd557c988f
No known key found for this signature in database
GPG Key ID: 978B1A1B79210AD6
5 changed files with 31 additions and 15 deletions

View File

@ -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)]

View File

@ -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;
}

View File

@ -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`
_ => {}
}
}

View File

@ -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

View File

@ -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
|