about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/methods/iter_on_single_or_empty_collections.rs4
-rw-r--r--tests/ui/iter_on_empty_collections.fixed5
-rw-r--r--tests/ui/iter_on_empty_collections.rs5
3 files changed, 12 insertions, 2 deletions
diff --git a/clippy_lints/src/methods/iter_on_single_or_empty_collections.rs b/clippy_lints/src/methods/iter_on_single_or_empty_collections.rs
index e8bba0dfe74..1bf323cf3c7 100644
--- a/clippy_lints/src/methods/iter_on_single_or_empty_collections.rs
+++ b/clippy_lints/src/methods/iter_on_single_or_empty_collections.rs
@@ -77,11 +77,11 @@ pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>, method
                 .qpath_res(path, *hir_id)
                 .opt_def_id()
                 .filter(|fn_id| cx.tcx.def_kind(fn_id).is_fn_like())
-                .is_some_and(|fn_id| is_arg_ty_unified_in_fn(cx, fn_id, expr.hir_id, args)),
+                .is_some_and(|fn_id| is_arg_ty_unified_in_fn(cx, fn_id, child_id, args)),
             ExprKind::MethodCall(_name, recv, args, _span) => is_arg_ty_unified_in_fn(
                 cx,
                 cx.typeck_results().type_dependent_def_id(parent.hir_id).unwrap(),
-                expr.hir_id,
+                child_id,
                 once(recv).chain(args.iter()),
             ),
             ExprKind::If(_, _, _)
diff --git a/tests/ui/iter_on_empty_collections.fixed b/tests/ui/iter_on_empty_collections.fixed
index 871cc18d7c2..4b5746c7b6f 100644
--- a/tests/ui/iter_on_empty_collections.fixed
+++ b/tests/ui/iter_on_empty_collections.fixed
@@ -29,6 +29,11 @@ fn array() {
         println!("{i}");
     }
 
+    // Same as above, but for empty collection iters with extra layers
+    for i in smth.as_ref().map_or({ [].iter() }, |s| s.iter()) {
+        println!("{y}", y = i + 1);
+    }
+
     // Same as above, but for regular function calls
     for i in Option::map_or(smth.as_ref(), [].iter(), |s| s.iter()) {
         println!("{i}");
diff --git a/tests/ui/iter_on_empty_collections.rs b/tests/ui/iter_on_empty_collections.rs
index 7e3df49eefc..737192d556d 100644
--- a/tests/ui/iter_on_empty_collections.rs
+++ b/tests/ui/iter_on_empty_collections.rs
@@ -29,6 +29,11 @@ fn array() {
         println!("{i}");
     }
 
+    // Same as above, but for empty collection iters with extra layers
+    for i in smth.as_ref().map_or({ [].iter() }, |s| s.iter()) {
+        println!("{y}", y = i + 1);
+    }
+
     // Same as above, but for regular function calls
     for i in Option::map_or(smth.as_ref(), [].iter(), |s| s.iter()) {
         println!("{i}");