Skip to content

Commit 228f064

Browse files
use is_{type,path}_diagnostic_item in more places (#15527)
changelog: none
2 parents 8779679 + a5745a7 commit 228f064

File tree

8 files changed

+19
-27
lines changed

8 files changed

+19
-27
lines changed

clippy_lints/src/instant_subtraction.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg;
33
use clippy_utils::msrvs::{self, Msrv};
44
use clippy_utils::source::snippet_with_context;
55
use clippy_utils::sugg::Sugg;
6-
use clippy_utils::ty;
6+
use clippy_utils::{is_path_diagnostic_item, ty};
77
use rustc_errors::Applicability;
88
use rustc_hir::{BinOpKind, Expr, ExprKind};
99
use rustc_lint::{LateContext, LateLintPass};
@@ -107,8 +107,7 @@ impl LateLintPass<'_> for InstantSubtraction {
107107

108108
fn is_instant_now_call(cx: &LateContext<'_>, expr_block: &'_ Expr<'_>) -> bool {
109109
if let ExprKind::Call(fn_expr, []) = expr_block.kind
110-
&& let Some(fn_id) = clippy_utils::path_def_id(cx, fn_expr)
111-
&& cx.tcx.is_diagnostic_item(sym::instant_now, fn_id)
110+
&& is_path_diagnostic_item(cx, fn_expr, sym::instant_now)
112111
{
113112
true
114113
} else {

clippy_lints/src/loops/missing_spin_loop.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use super::MISSING_SPIN_LOOP;
22
use clippy_utils::diagnostics::span_lint_and_sugg;
33
use clippy_utils::std_or_core;
4+
use clippy_utils::ty::is_type_diagnostic_item;
45
use rustc_errors::Applicability;
56
use rustc_hir::{Block, Expr, ExprKind};
67
use rustc_lint::LateContext;
7-
use rustc_middle::ty;
88
use rustc_span::sym;
99

1010
fn unpack_cond<'tcx>(cond: &'tcx Expr<'tcx>) -> &'tcx Expr<'tcx> {
@@ -39,8 +39,8 @@ pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, cond: &'tcx Expr<'_>, body: &'
3939
) = body.kind
4040
&& let ExprKind::MethodCall(method, callee, ..) = unpack_cond(cond).kind
4141
&& [sym::load, sym::compare_exchange, sym::compare_exchange_weak].contains(&method.ident.name)
42-
&& let ty::Adt(def, _args) = cx.typeck_results().expr_ty(callee).kind()
43-
&& cx.tcx.is_diagnostic_item(sym::AtomicBool, def.did())
42+
&& let callee_ty = cx.typeck_results().expr_ty(callee)
43+
&& is_type_diagnostic_item(cx, callee_ty, sym::AtomicBool)
4444
&& let Some(std_or_core) = std_or_core(cx)
4545
{
4646
span_lint_and_sugg(

clippy_lints/src/loops/unused_enumerate_index.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use super::UNUSED_ENUMERATE_INDEX;
22
use clippy_utils::diagnostics::span_lint_and_then;
33
use clippy_utils::source::snippet;
4+
use clippy_utils::ty::is_type_diagnostic_item;
45
use clippy_utils::{pat_is_wild, sugg};
56
use rustc_errors::Applicability;
67
use rustc_hir::def::DefKind;
78
use rustc_hir::{Expr, ExprKind, Pat, PatKind};
89
use rustc_lint::LateContext;
9-
use rustc_middle::ty;
1010
use rustc_span::sym;
1111

1212
/// Checks for the `UNUSED_ENUMERATE_INDEX` lint.
@@ -17,8 +17,7 @@ pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, pat: &Pat<'tcx>, arg: &Expr<'_
1717
&& let ExprKind::MethodCall(_method, self_arg, [], _) = arg.kind
1818
&& let ty = cx.typeck_results().expr_ty(arg)
1919
&& pat_is_wild(cx, &index.kind, body)
20-
&& let ty::Adt(base, _) = *ty.kind()
21-
&& cx.tcx.is_diagnostic_item(sym::Enumerate, base.did())
20+
&& is_type_diagnostic_item(cx, ty, sym::Enumerate)
2221
&& let Some((DefKind::AssocFn, call_id)) = cx.typeck_results().type_dependent_def(arg.hir_id)
2322
&& cx.tcx.is_diagnostic_item(sym::enumerate_method, call_id)
2423
{

clippy_lints/src/methods/read_line_without_trim.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ fn parse_fails_on_trailing_newline(ty: Ty<'_>) -> bool {
3131
}
3232

3333
pub fn check(cx: &LateContext<'_>, call: &Expr<'_>, recv: &Expr<'_>, arg: &Expr<'_>) {
34-
if let Some(recv_adt) = cx.typeck_results().expr_ty(recv).ty_adt_def()
35-
&& cx.tcx.is_diagnostic_item(sym::Stdin, recv_adt.did())
34+
let recv_ty = cx.typeck_results().expr_ty(recv);
35+
if is_type_diagnostic_item(cx, recv_ty, sym::Stdin)
3636
&& let ExprKind::Path(QPath::Resolved(_, path)) = arg.peel_borrows().kind
3737
&& let Res::Local(local_id) = path.res
3838
{

clippy_lints/src/methods/suspicious_to_owned.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use clippy_utils::diagnostics::span_lint_and_then;
22
use clippy_utils::is_diag_trait_item;
33
use clippy_utils::source::snippet_with_context;
4+
use clippy_utils::ty::is_type_diagnostic_item;
45
use rustc_errors::Applicability;
56
use rustc_hir as hir;
67
use rustc_lint::LateContext;
78
use rustc_middle::ty::print::with_forced_trimmed_paths;
8-
use rustc_middle::ty::{self};
99
use rustc_span::sym;
1010

1111
use super::SUSPICIOUS_TO_OWNED;
@@ -14,8 +14,7 @@ pub fn check(cx: &LateContext<'_>, expr: &hir::Expr<'_>, recv: &hir::Expr<'_>) -
1414
if let Some(method_def_id) = cx.typeck_results().type_dependent_def_id(expr.hir_id)
1515
&& is_diag_trait_item(cx, method_def_id, sym::ToOwned)
1616
&& let input_type = cx.typeck_results().expr_ty(expr)
17-
&& let ty::Adt(adt, _) = cx.typeck_results().expr_ty(expr).kind()
18-
&& cx.tcx.is_diagnostic_item(sym::Cow, adt.did())
17+
&& is_type_diagnostic_item(cx, input_type, sym::Cow)
1918
{
2019
let mut app = Applicability::MaybeIncorrect;
2120
let recv_snip = snippet_with_context(cx, recv.span, expr.span.ctxt(), "..", &mut app).0;

clippy_lints/src/methods/unused_enumerate_index.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use clippy_utils::diagnostics::span_lint_hir_and_then;
22
use clippy_utils::source::{SpanRangeExt, snippet};
3+
use clippy_utils::ty::is_type_diagnostic_item;
34
use clippy_utils::{expr_or_init, is_trait_method, pat_is_wild};
45
use rustc_errors::Applicability;
56
use rustc_hir::{Expr, ExprKind, FnDecl, PatKind, TyKind};
67
use rustc_lint::LateContext;
7-
use rustc_middle::ty::AdtDef;
88
use rustc_span::{Span, sym};
99

1010
use crate::loops::UNUSED_ENUMERATE_INDEX;
@@ -39,9 +39,8 @@ use crate::loops::UNUSED_ENUMERATE_INDEX;
3939
/// * `closure_arg`: The argument to the map function call containing the closure/function to apply
4040
pub(super) fn check(cx: &LateContext<'_>, call_expr: &Expr<'_>, recv: &Expr<'_>, closure_arg: &Expr<'_>) {
4141
let recv_ty = cx.typeck_results().expr_ty(recv);
42-
if let Some(recv_ty_defid) = recv_ty.ty_adt_def().map(AdtDef::did)
43-
// If we call a method on a `std::iter::Enumerate` instance
44-
&& cx.tcx.is_diagnostic_item(sym::Enumerate, recv_ty_defid)
42+
// If we call a method on a `std::iter::Enumerate` instance
43+
if is_type_diagnostic_item(cx, recv_ty, sym::Enumerate)
4544
// If we are calling a method of the `Iterator` trait
4645
&& is_trait_method(cx, call_expr, sym::Iterator)
4746
// And the map argument is a closure

clippy_lints/src/zombie_processes.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use ControlFlow::{Break, Continue};
22
use clippy_utils::diagnostics::span_lint_and_then;
3+
use clippy_utils::ty::is_type_diagnostic_item;
34
use clippy_utils::{fn_def_id, get_enclosing_block, path_to_local_id};
45
use rustc_ast::Mutability;
56
use rustc_ast::visit::visit_opt;
@@ -58,8 +59,8 @@ declare_lint_pass!(ZombieProcesses => [ZOMBIE_PROCESSES]);
5859
impl<'tcx> LateLintPass<'tcx> for ZombieProcesses {
5960
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) {
6061
if let ExprKind::Call(..) | ExprKind::MethodCall(..) = expr.kind
61-
&& let Some(child_adt) = cx.typeck_results().expr_ty(expr).ty_adt_def()
62-
&& cx.tcx.is_diagnostic_item(sym::Child, child_adt.did())
62+
&& let child_ty = cx.typeck_results().expr_ty(expr)
63+
&& is_type_diagnostic_item(cx, child_ty, sym::Child)
6364
{
6465
match cx.tcx.parent_hir_node(expr.hir_id) {
6566
Node::LetStmt(local)

clippy_utils/src/ty/mod.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,7 @@ pub fn is_recursively_primitive_type(ty: Ty<'_>) -> bool {
387387
/// Checks if the type is a reference equals to a diagnostic item
388388
pub fn is_type_ref_to_diagnostic_item(cx: &LateContext<'_>, ty: Ty<'_>, diag_item: Symbol) -> bool {
389389
match ty.kind() {
390-
ty::Ref(_, ref_ty, _) => match ref_ty.kind() {
391-
ty::Adt(adt, _) => cx.tcx.is_diagnostic_item(diag_item, adt.did()),
392-
_ => false,
393-
},
390+
ty::Ref(_, ref_ty, _) => is_type_diagnostic_item(cx, *ref_ty, diag_item),
394391
_ => false,
395392
}
396393
}
@@ -1378,9 +1375,7 @@ pub fn has_non_owning_mutable_access<'tcx>(cx: &LateContext<'tcx>, iter_ty: Ty<'
13781375

13791376
/// Check if `ty` is slice-like, i.e., `&[T]`, `[T; N]`, or `Vec<T>`.
13801377
pub fn is_slice_like<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> bool {
1381-
ty.is_slice()
1382-
|| ty.is_array()
1383-
|| matches!(ty.kind(), ty::Adt(adt_def, _) if cx.tcx.is_diagnostic_item(sym::Vec, adt_def.did()))
1378+
ty.is_slice() || ty.is_array() || is_type_diagnostic_item(cx, ty, sym::Vec)
13841379
}
13851380

13861381
pub fn get_field_idx_by_name(ty: Ty<'_>, name: Symbol) -> Option<usize> {

0 commit comments

Comments
 (0)