[Clippy] Swap iter_over_hash_type
to use diagnostic items instead of paths
This commit is contained in:
parent
37e38320b4
commit
917775fff1
@ -1,10 +1,5 @@
|
|||||||
use clippy_utils::diagnostics::span_lint;
|
use clippy_utils::diagnostics::span_lint;
|
||||||
use clippy_utils::higher::ForLoop;
|
use clippy_utils::higher::ForLoop;
|
||||||
use clippy_utils::match_any_def_paths;
|
|
||||||
use clippy_utils::paths::{
|
|
||||||
HASHMAP_DRAIN, HASHMAP_ITER, HASHMAP_ITER_MUT, HASHMAP_KEYS, HASHMAP_VALUES, HASHMAP_VALUES_MUT, HASHSET_DRAIN,
|
|
||||||
HASHSET_ITER_TY,
|
|
||||||
};
|
|
||||||
use clippy_utils::ty::is_type_diagnostic_item;
|
use clippy_utils::ty::is_type_diagnostic_item;
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_session::declare_lint_pass;
|
use rustc_session::declare_lint_pass;
|
||||||
@ -44,28 +39,23 @@
|
|||||||
|
|
||||||
impl LateLintPass<'_> for IterOverHashType {
|
impl LateLintPass<'_> for IterOverHashType {
|
||||||
fn check_expr(&mut self, cx: &LateContext<'_>, expr: &'_ rustc_hir::Expr<'_>) {
|
fn check_expr(&mut self, cx: &LateContext<'_>, expr: &'_ rustc_hir::Expr<'_>) {
|
||||||
|
let hash_iter_tys = [
|
||||||
|
sym::HashMap,
|
||||||
|
sym::HashSet,
|
||||||
|
sym::hashmap_keys_ty,
|
||||||
|
sym::hashmap_values_ty,
|
||||||
|
sym::hashmap_values_mut_ty,
|
||||||
|
sym::hashmap_iter_ty,
|
||||||
|
sym::hashmap_iter_mut_ty,
|
||||||
|
sym::hashmap_drain_ty,
|
||||||
|
sym::hashset_iter_ty,
|
||||||
|
sym::hashset_drain_ty,
|
||||||
|
];
|
||||||
|
|
||||||
if let Some(for_loop) = ForLoop::hir(expr)
|
if let Some(for_loop) = ForLoop::hir(expr)
|
||||||
&& !for_loop.body.span.from_expansion()
|
&& !for_loop.body.span.from_expansion()
|
||||||
&& let ty = cx.typeck_results().expr_ty(for_loop.arg).peel_refs()
|
&& let ty = cx.typeck_results().expr_ty(for_loop.arg).peel_refs()
|
||||||
&& let Some(adt) = ty.ty_adt_def()
|
&& hash_iter_tys.into_iter().any(|sym| is_type_diagnostic_item(cx, ty, sym))
|
||||||
&& let did = adt.did()
|
|
||||||
&& (match_any_def_paths(
|
|
||||||
cx,
|
|
||||||
did,
|
|
||||||
&[
|
|
||||||
&HASHMAP_KEYS,
|
|
||||||
&HASHMAP_VALUES,
|
|
||||||
&HASHMAP_VALUES_MUT,
|
|
||||||
&HASHMAP_ITER,
|
|
||||||
&HASHMAP_ITER_MUT,
|
|
||||||
&HASHMAP_DRAIN,
|
|
||||||
&HASHSET_ITER_TY,
|
|
||||||
&HASHSET_DRAIN,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
.is_some()
|
|
||||||
|| is_type_diagnostic_item(cx, ty, sym::HashMap)
|
|
||||||
|| is_type_diagnostic_item(cx, ty, sym::HashSet))
|
|
||||||
{
|
{
|
||||||
span_lint(
|
span_lint(
|
||||||
cx,
|
cx,
|
||||||
|
@ -19,14 +19,6 @@
|
|||||||
pub const FUTURES_IO_ASYNCREADEXT: [&str; 3] = ["futures_util", "io", "AsyncReadExt"];
|
pub const FUTURES_IO_ASYNCREADEXT: [&str; 3] = ["futures_util", "io", "AsyncReadExt"];
|
||||||
#[expect(clippy::invalid_paths)] // internal lints do not know about all external crates
|
#[expect(clippy::invalid_paths)] // internal lints do not know about all external crates
|
||||||
pub const FUTURES_IO_ASYNCWRITEEXT: [&str; 3] = ["futures_util", "io", "AsyncWriteExt"];
|
pub const FUTURES_IO_ASYNCWRITEEXT: [&str; 3] = ["futures_util", "io", "AsyncWriteExt"];
|
||||||
pub const HASHMAP_ITER: [&str; 5] = ["std", "collections", "hash", "map", "Iter"];
|
|
||||||
pub const HASHMAP_ITER_MUT: [&str; 5] = ["std", "collections", "hash", "map", "IterMut"];
|
|
||||||
pub const HASHMAP_KEYS: [&str; 5] = ["std", "collections", "hash", "map", "Keys"];
|
|
||||||
pub const HASHMAP_VALUES: [&str; 5] = ["std", "collections", "hash", "map", "Values"];
|
|
||||||
pub const HASHMAP_DRAIN: [&str; 5] = ["std", "collections", "hash", "map", "Drain"];
|
|
||||||
pub const HASHMAP_VALUES_MUT: [&str; 5] = ["std", "collections", "hash", "map", "ValuesMut"];
|
|
||||||
pub const HASHSET_ITER_TY: [&str; 5] = ["std", "collections", "hash", "set", "Iter"];
|
|
||||||
pub const HASHSET_DRAIN: [&str; 5] = ["std", "collections", "hash", "set", "Drain"];
|
|
||||||
pub const IDENT: [&str; 3] = ["rustc_span", "symbol", "Ident"];
|
pub const IDENT: [&str; 3] = ["rustc_span", "symbol", "Ident"];
|
||||||
pub const IDENT_AS_STR: [&str; 4] = ["rustc_span", "symbol", "Ident", "as_str"];
|
pub const IDENT_AS_STR: [&str; 4] = ["rustc_span", "symbol", "Ident", "as_str"];
|
||||||
pub const ITERTOOLS_NEXT_TUPLE: [&str; 3] = ["itertools", "Itertools", "next_tuple"];
|
pub const ITERTOOLS_NEXT_TUPLE: [&str; 3] = ["itertools", "Itertools", "next_tuple"];
|
||||||
|
Loading…
Reference in New Issue
Block a user