Dedup std_instead_of_core by using first segment span for uniqueness

This commit is contained in:
MarcusGrass 2024-03-03 15:30:49 +01:00
parent 5e0afee334
commit 74cba639e9
No known key found for this signature in database
GPG Key ID: B3F995FE064E3AA9
4 changed files with 38 additions and 18 deletions

View File

@ -109,7 +109,7 @@ impl<'tcx> LateLintPass<'tcx> for StdReexports {
sym::core => (STD_INSTEAD_OF_CORE, "std", "core"),
sym::alloc => (STD_INSTEAD_OF_ALLOC, "std", "alloc"),
_ => {
self.prev_span = path.span;
self.prev_span = first_segment.ident.span;
return;
},
},
@ -117,13 +117,13 @@ impl<'tcx> LateLintPass<'tcx> for StdReexports {
if cx.tcx.crate_name(def_id.krate) == sym::core {
(ALLOC_INSTEAD_OF_CORE, "alloc", "core")
} else {
self.prev_span = path.span;
self.prev_span = first_segment.ident.span;
return;
}
},
_ => return,
};
if path.span != self.prev_span {
if first_segment.ident.span != self.prev_span {
span_lint_and_sugg(
cx,
lint,
@ -133,7 +133,7 @@ impl<'tcx> LateLintPass<'tcx> for StdReexports {
replace_with.to_string(),
Applicability::MachineApplicable,
);
self.prev_span = path.span;
self.prev_span = first_segment.ident.span;
}
}
}

View File

@ -1,5 +1,4 @@
//@aux-build:proc_macro_derive.rs
//@compile-flags: -Zdeduplicate-diagnostics=yes
#![warn(clippy::std_instead_of_core)]
#![allow(unused_imports)]
@ -24,6 +23,14 @@ fn std_instead_of_core() {
use core::fmt::{Debug, Result};
//~^ ERROR: used import from `std` instead of `core`
// Multiple imports multiline
#[rustfmt::skip]
use core::{
//~^ ERROR: used import from `std` instead of `core`
fmt::Write,
ptr::read_unaligned,
};
// Function calls
let ptr = core::ptr::null::<u32>();
//~^ ERROR: used import from `std` instead of `core`

View File

@ -1,5 +1,4 @@
//@aux-build:proc_macro_derive.rs
//@compile-flags: -Zdeduplicate-diagnostics=yes
#![warn(clippy::std_instead_of_core)]
#![allow(unused_imports)]
@ -24,6 +23,14 @@ fn std_instead_of_core() {
use std::fmt::{Debug, Result};
//~^ ERROR: used import from `std` instead of `core`
// Multiple imports multiline
#[rustfmt::skip]
use std::{
//~^ ERROR: used import from `std` instead of `core`
fmt::Write,
ptr::read_unaligned,
};
// Function calls
let ptr = std::ptr::null::<u32>();
//~^ ERROR: used import from `std` instead of `core`

View File

@ -1,5 +1,5 @@
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:15:9
--> tests/ui/std_instead_of_core.rs:14:9
|
LL | use std::hash::Hasher;
| ^^^ help: consider importing the item from `core`: `core`
@ -8,49 +8,55 @@ LL | use std::hash::Hasher;
= help: to override `-D warnings` add `#[allow(clippy::std_instead_of_core)]`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:18:11
--> tests/ui/std_instead_of_core.rs:17:11
|
LL | use ::std::hash::Hash;
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:24:9
--> tests/ui/std_instead_of_core.rs:23:9
|
LL | use std::fmt::{Debug, Result};
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:28:15
--> tests/ui/std_instead_of_core.rs:28:9
|
LL | use std::{
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:35:15
|
LL | let ptr = std::ptr::null::<u32>();
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:30:21
--> tests/ui/std_instead_of_core.rs:37:21
|
LL | let ptr_mut = ::std::ptr::null_mut::<usize>();
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:34:16
--> tests/ui/std_instead_of_core.rs:41:16
|
LL | let cell = std::cell::Cell::new(8u32);
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:36:27
--> tests/ui/std_instead_of_core.rs:43:27
|
LL | let cell_absolute = ::std::cell::Cell::new(8u32);
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `core`
--> tests/ui/std_instead_of_core.rs:45:9
--> tests/ui/std_instead_of_core.rs:52:9
|
LL | use std::iter::Iterator;
| ^^^ help: consider importing the item from `core`: `core`
error: used import from `std` instead of `alloc`
--> tests/ui/std_instead_of_core.rs:52:9
--> tests/ui/std_instead_of_core.rs:59:9
|
LL | use std::vec;
| ^^^ help: consider importing the item from `alloc`: `alloc`
@ -59,13 +65,13 @@ LL | use std::vec;
= help: to override `-D warnings` add `#[allow(clippy::std_instead_of_alloc)]`
error: used import from `std` instead of `alloc`
--> tests/ui/std_instead_of_core.rs:54:9
--> tests/ui/std_instead_of_core.rs:61:9
|
LL | use std::vec::Vec;
| ^^^ help: consider importing the item from `alloc`: `alloc`
error: used import from `alloc` instead of `core`
--> tests/ui/std_instead_of_core.rs:60:9
--> tests/ui/std_instead_of_core.rs:67:9
|
LL | use alloc::slice::from_ref;
| ^^^^^ help: consider importing the item from `core`: `core`
@ -73,5 +79,5 @@ LL | use alloc::slice::from_ref;
= note: `-D clippy::alloc-instead-of-core` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::alloc_instead_of_core)]`
error: aborting due to 11 previous errors
error: aborting due to 12 previous errors