1 use super::utils::derefs_to_slice;
2 use clippy_utils::diagnostics::span_lint_and_sugg;
3 use clippy_utils::source::snippet_with_applicability;
4 use clippy_utils::ty::is_type_diagnostic_item;
5 use rustc_errors::Applicability;
7 use rustc_lint::LateContext;
10 use super::ITER_COUNT;
12 pub(crate) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &Expr<'_>, recv: &'tcx Expr<'tcx>, iter_method: &str) {
13 let ty = cx.typeck_results().expr_ty(recv);
14 let caller_type = if derefs_to_slice(cx, recv, ty).is_some() {
16 } else if is_type_diagnostic_item(cx, ty, sym::Vec) {
18 } else if is_type_diagnostic_item(cx, ty, sym::VecDeque) {
20 } else if is_type_diagnostic_item(cx, ty, sym::HashSet) {
22 } else if is_type_diagnostic_item(cx, ty, sym::HashMap) {
24 } else if is_type_diagnostic_item(cx, ty, sym::BTreeMap) {
26 } else if is_type_diagnostic_item(cx, ty, sym::BTreeSet) {
28 } else if is_type_diagnostic_item(cx, ty, sym::LinkedList) {
30 } else if is_type_diagnostic_item(cx, ty, sym::BinaryHeap) {
35 let mut applicability = Applicability::MachineApplicable;
40 &format!("called `.{iter_method}().count()` on a `{caller_type}`"),
44 snippet_with_applicability(cx, recv.span, "..", &mut applicability),