about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/assertions_on_constants.rs63
1 files changed, 30 insertions, 33 deletions
diff --git a/clippy_lints/src/assertions_on_constants.rs b/clippy_lints/src/assertions_on_constants.rs
index 22dbd3ecc9c..32ca1cc1bb9 100644
--- a/clippy_lints/src/assertions_on_constants.rs
+++ b/clippy_lints/src/assertions_on_constants.rs
@@ -1,11 +1,9 @@
-use if_chain::if_chain;
 use rustc::hir::{Expr, ExprKind};
 use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
 use rustc::{declare_lint_pass, declare_tool_lint};
-use syntax_pos::Span;
 
 use crate::consts::{constant, Constant};
-use crate::utils::{in_macro_or_desugar, is_direct_expn_of, span_help_and_lint};
+use crate::utils::{in_macro_or_desugar, is_direct_expn_of, is_expn_of, span_help_and_lint};
 
 declare_clippy_lint! {
     /// **What it does:** Checks for `assert!(true)` and `assert!(false)` calls.
@@ -33,40 +31,39 @@ declare_lint_pass!(AssertionsOnConstants => [ASSERTIONS_ON_CONSTANTS]);
 
 impl<'a, 'tcx> LateLintPass<'a, 'tcx> for AssertionsOnConstants {
     fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, e: &'tcx Expr) {
-        let mut is_debug_assert = false;
-        if let Some(assert_span) = is_direct_expn_of(e.span, "assert") {
-            if in_macro_or_desugar(assert_span) {
-                return;
-            }
-            if let Some(debug_assert_span) = is_direct_expn_of(assert_span, "debug_assert") {
-                if in_macro_or_desugar(debug_assert_span) {
-                    return;
-                }
-                is_debug_assert = true;
-            }
+        let lint_assert_cb = |is_debug_assert: bool| {
             if let ExprKind::Unary(_, ref lit) = e.node {
-                if let Some((bool_const, _)) = constant(cx, cx.tables, lit) {
-                    if let Constant::Bool(is_true) bool_const {
-                        if is_true {
-                            span_help_and_lint(
-                                cx,
-                                ASSERTIONS_ON_CONSTANTS,
-                                e.span,
-                                "`assert!(true)` will be optimized out by the compiler",
-                                "remove it"
-                            );
-                        } else if !is_debug_assert {
-                            span_help_and_lint(
-                                cx,
-                                ASSERTIONS_ON_CONSTANTS,
-                                e.span,
-                                "`assert!(false)` should probably be replaced",
-                                "use `panic!()` or `unreachable!()`"
-                            );
-                        }
+                if let Some((Constant::Bool(is_true), _)) = constant(cx, cx.tables, lit) {
+                    if is_true {
+                        span_help_and_lint(
+                            cx,
+                            ASSERTIONS_ON_CONSTANTS,
+                            e.span,
+                            "`assert!(true)` will be optimized out by the compiler",
+                            "remove it",
+                        );
+                    } else if !is_debug_assert {
+                        span_help_and_lint(
+                            cx,
+                            ASSERTIONS_ON_CONSTANTS,
+                            e.span,
+                            "`assert!(false)` should probably be replaced",
+                            "use `panic!()` or `unreachable!()`",
+                        );
                     }
                 }
             }
+        };
+        if let Some(debug_assert_span) = is_expn_of(e.span, "debug_assert") {
+            if in_macro_or_desugar(debug_assert_span) {
+                return;
+            }
+            lint_assert_cb(true);
+        } else if let Some(assert_span) = is_direct_expn_of(e.span, "assert") {
+            if in_macro_or_desugar(assert_span) {
+                return;
+            }
+            lint_assert_cb(false);
         }
     }
 }