about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCaio <c410.f3r@gmail.com>2021-12-08 20:02:28 -0300
committerCaio <c410.f3r@gmail.com>2021-12-08 20:02:28 -0300
commit392b2eff4b29cb590f1001dba12e5eed790b9841 (patch)
treed42b1072311432eb1c02398ed883c53a8634b47d
parent07f4f7c2dd07fce07b0d6d3c95eb01ed80b47638 (diff)
downloadrust-392b2eff4b29cb590f1001dba12e5eed790b9841.tar.gz
rust-392b2eff4b29cb590f1001dba12e5eed790b9841.zip
Fix `blocks_in_if_conditions` false positive
-rw-r--r--clippy_lints/src/blocks_in_if_conditions.rs8
-rw-r--r--tests/ui/blocks_in_if_conditions_closure.rs8
2 files changed, 13 insertions, 3 deletions
diff --git a/clippy_lints/src/blocks_in_if_conditions.rs b/clippy_lints/src/blocks_in_if_conditions.rs
index 47e5b0d583d..ff7b9fb2254 100644
--- a/clippy_lints/src/blocks_in_if_conditions.rs
+++ b/clippy_lints/src/blocks_in_if_conditions.rs
@@ -72,9 +72,11 @@ impl<'a, 'tcx> Visitor<'tcx> for ExVisitor<'a, 'tcx> {
 
             let body = self.cx.tcx.hir().body(eid);
             let ex = &body.value;
-            if matches!(ex.kind, ExprKind::Block(_, _)) && !body.value.span.from_expansion() {
-                self.found_block = Some(ex);
-                return;
+            if let ExprKind::Block(block, _) = ex.kind {
+                if !body.value.span.from_expansion() && !block.stmts.is_empty() {
+                    self.found_block = Some(ex);
+                    return;
+                }
             }
         }
         walk_expr(self, expr);
diff --git a/tests/ui/blocks_in_if_conditions_closure.rs b/tests/ui/blocks_in_if_conditions_closure.rs
index 2856943b9be..169589f6d4e 100644
--- a/tests/ui/blocks_in_if_conditions_closure.rs
+++ b/tests/ui/blocks_in_if_conditions_closure.rs
@@ -44,6 +44,14 @@ fn macro_in_closure() {
     }
 }
 
+fn closure(_: impl FnMut()) -> bool {
+    true
+}
+
+fn function_with_empty_closure() {
+    if closure(|| {}) {}
+}
+
 #[rustfmt::skip]
 fn main() {
     let mut range = 0..10;