Skip to content

Commit 80b886e

Browse files
committed
perf(get_unwrap): avoid calling is_type_diagnostic_item multiple times
1 parent 7b0c3d0 commit 80b886e

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

clippy_lints/src/methods/get_unwrap.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use super::utils::derefs_to_slice;
22
use clippy_utils::diagnostics::span_lint_and_then;
33
use clippy_utils::get_parent_expr;
44
use clippy_utils::source::snippet_with_applicability;
5-
use clippy_utils::ty::is_type_diagnostic_item;
65
use rustc_errors::Applicability;
76
use rustc_hir as hir;
87
use rustc_lint::LateContext;
@@ -22,16 +21,17 @@ pub(super) fn check<'tcx>(
2221
let expr_ty = cx.typeck_results().expr_ty(recv);
2322
let caller_type = if derefs_to_slice(cx, recv, expr_ty).is_some() {
2423
"slice"
25-
} else if is_type_diagnostic_item(cx, expr_ty, sym::Vec) {
26-
"Vec"
27-
} else if is_type_diagnostic_item(cx, expr_ty, sym::VecDeque) {
28-
"VecDeque"
29-
} else if !is_mut && is_type_diagnostic_item(cx, expr_ty, sym::HashMap) {
30-
"HashMap"
31-
} else if !is_mut && is_type_diagnostic_item(cx, expr_ty, sym::BTreeMap) {
32-
"BTreeMap"
3324
} else {
34-
return; // caller is not a type that we want to lint
25+
match expr_ty
26+
.ty_adt_def()
27+
.and_then(|def| cx.tcx.get_diagnostic_name(def.did()))
28+
{
29+
Some(sym::Vec) => "Vec",
30+
Some(sym::VecDeque) => "VecDeque",
31+
Some(sym::HashMap) if !is_mut => "HashMap",
32+
Some(sym::BTreeMap) if !is_mut => "BTreeMap",
33+
_ => return, // caller is not a type that we want to lint
34+
}
3535
};
3636

3737
let mut span = expr.span;

0 commit comments

Comments
 (0)