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_type) {
18 } else if is_type_diagnostic_item(cx, ty, sym::vecdeque_type) {
20 } else if is_type_diagnostic_item(cx, ty, sym::hashset_type) {
22 } else if is_type_diagnostic_item(cx, ty, sym::hashmap_type) {
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 `.{}().count()` on a `{}`", iter_method, caller_type),
44 snippet_with_applicability(cx, recv.span, "..", &mut applicability),