From f1860d190131c643c3f5db97fdbcb69adc57a789 Mon Sep 17 00:00:00 2001 From: Mara Bos Date: Thu, 12 Aug 2021 17:35:37 +0200 Subject: [PATCH 1/2] Include attributes in removal span for unused imports. --- compiler/rustc_resolve/src/check_unused.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_resolve/src/check_unused.rs b/compiler/rustc_resolve/src/check_unused.rs index 89ce89b2e9a94..9f4f2b82f6085 100644 --- a/compiler/rustc_resolve/src/check_unused.rs +++ b/compiler/rustc_resolve/src/check_unused.rs @@ -98,7 +98,7 @@ impl<'a, 'b> UnusedImportCheckVisitor<'a, 'b> { impl<'a, 'b> Visitor<'a> for UnusedImportCheckVisitor<'a, 'b> { fn visit_item(&mut self, item: &'a ast::Item) { - self.item_span = item.span; + self.item_span = item.span_with_attributes(); // Ignore is_public import statements because there's no way to be sure // whether they're used or not. Also ignore imports with a dummy span From 8dc8649bd71c9c3ab51473753e5869392ae54d60 Mon Sep 17 00:00:00 2001 From: Mara Bos Date: Thu, 12 Aug 2021 17:35:57 +0200 Subject: [PATCH 2/2] Add test or unused import removal suggestion with attributes. --- .../ui/imports/unused-import-issue-87973.fixed | 8 ++++++++ src/test/ui/imports/unused-import-issue-87973.rs | 11 +++++++++++ .../ui/imports/unused-import-issue-87973.stderr | 14 ++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/test/ui/imports/unused-import-issue-87973.fixed create mode 100644 src/test/ui/imports/unused-import-issue-87973.rs create mode 100644 src/test/ui/imports/unused-import-issue-87973.stderr diff --git a/src/test/ui/imports/unused-import-issue-87973.fixed b/src/test/ui/imports/unused-import-issue-87973.fixed new file mode 100644 index 0000000000000..5c194d18aca36 --- /dev/null +++ b/src/test/ui/imports/unused-import-issue-87973.fixed @@ -0,0 +1,8 @@ +// run-rustfix +#![deny(unused_imports)] + +// Check that attributes get removed too. See #87973. + +//~^ ERROR unused import + +fn main() {} diff --git a/src/test/ui/imports/unused-import-issue-87973.rs b/src/test/ui/imports/unused-import-issue-87973.rs new file mode 100644 index 0000000000000..c31f0f9796ecf --- /dev/null +++ b/src/test/ui/imports/unused-import-issue-87973.rs @@ -0,0 +1,11 @@ +// run-rustfix +#![deny(unused_imports)] + +// Check that attributes get removed too. See #87973. +#[deprecated] +#[allow(unsafe_code)] +#[cfg(not(foo))] +use std::fs; +//~^ ERROR unused import + +fn main() {} diff --git a/src/test/ui/imports/unused-import-issue-87973.stderr b/src/test/ui/imports/unused-import-issue-87973.stderr new file mode 100644 index 0000000000000..81b7ea791912d --- /dev/null +++ b/src/test/ui/imports/unused-import-issue-87973.stderr @@ -0,0 +1,14 @@ +error: unused import: `std::fs` + --> $DIR/unused-import-issue-87973.rs:8:5 + | +LL | use std::fs; + | ^^^^^^^ + | +note: the lint level is defined here + --> $DIR/unused-import-issue-87973.rs:2:9 + | +LL | #![deny(unused_imports)] + | ^^^^^^^^^^^^^^ + +error: aborting due to previous error +