1
Fork 0

Rollup merge of #123344 - pietroalbini:pa-unused-imports, r=Nilstrieb

Remove braces when fixing a nested use tree into a single item

[Back in 2019](https://github.com/rust-lang/rust/pull/56645) I added rustfix support for the `unused_imports` lint, to automatically remove them when running `cargo fix`. For the most part this worked great, but when removing all but one childs of a nested use tree it turned `use foo::{Unused, Used}` into `use foo::{Used}`. This is slightly annoying, because it then requires you to run `rustfmt` to get `use foo::Used`.

This PR automatically removes braces and the surrouding whitespace when all but one child of a nested use tree are unused. To get it done I had to add the span of the nested use tree to the AST, and refactor a bit the code I wrote back then.

A thing I noticed is, there doesn't seem to be any `//@ run-rustfix` test for fixing the `unused_imports` lint. I created a test in `tests/suggestions` (is that the right directory?) that for now tests just what I added in the PR. I can followup in a separate PR to add more tests for fixing `unused_lints`.

This PR is best reviewed commit-by-commit.
This commit is contained in:
Matthias Krüger 2024-05-08 23:33:24 +02:00 committed by GitHub
commit d30af5e168
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 194 additions and 60 deletions

View file

@ -336,7 +336,7 @@ impl<'a> Parser<'a> {
UseTreeKind::Glob => {
e.note("the wildcard token must be last on the path");
}
UseTreeKind::Nested(..) => {
UseTreeKind::Nested { .. } => {
e.note("glob-like brace syntax must be last on the path");
}
_ => (),
@ -1056,7 +1056,11 @@ impl<'a> Parser<'a> {
Ok(if self.eat(&token::BinOp(token::Star)) {
UseTreeKind::Glob
} else {
UseTreeKind::Nested(self.parse_use_tree_list()?)
let lo = self.token.span;
UseTreeKind::Nested {
items: self.parse_use_tree_list()?,
span: lo.to(self.prev_token.span),
}
})
}