]> git.lizzy.rs Git - rust.git/blobdiff - clippy_lints/src/if_not_else.rs
Merge branch 'macro-use' into HEAD
[rust.git] / clippy_lints / src / if_not_else.rs
index 72a3d485bd08069eb3187463150255f2e67a1667..eea83ca6b88572d8577f8f21b9d420a2b95065b1 100644 (file)
@@ -1,9 +1,11 @@
-//! lint on if branches that could be swapped so no `!` operation is necessary on the condition
+//! lint on if branches that could be swapped so no `!` operation is necessary
+//! on the condition
 
 use rustc::lint::*;
+use rustc::{declare_lint, lint_array};
 use syntax::ast::*;
 
-use utils::span_help_and_lint;
+use crate::utils::{in_external_macro, span_help_and_lint};
 
 /// **What it does:** Checks for usage of `!` or `!=` in an if condition with an
 /// else branch.
@@ -30,9 +32,9 @@
 ///     a()
 /// }
 /// ```
-declare_lint! {
+declare_clippy_lint! {
     pub IF_NOT_ELSE,
-    Allow,
+    pedantic,
     "`if` branches that could be swapped so no negation operation is necessary on the condition"
 }
 
@@ -46,22 +48,29 @@ fn get_lints(&self) -> LintArray {
 
 impl EarlyLintPass for IfNotElse {
     fn check_expr(&mut self, cx: &EarlyContext, item: &Expr) {
+        if in_external_macro(cx, item.span) {
+            return;
+        }
         if let ExprKind::If(ref cond, _, Some(ref els)) = item.node {
             if let ExprKind::Block(..) = els.node {
                 match cond.node {
                     ExprKind::Unary(UnOp::Not, _) => {
-                        span_help_and_lint(cx,
-                                           IF_NOT_ELSE,
-                                           item.span,
-                                           "Unnecessary boolean `not` operation",
-                                           "remove the `!` and swap the blocks of the if/else");
+                        span_help_and_lint(
+                            cx,
+                            IF_NOT_ELSE,
+                            item.span,
+                            "Unnecessary boolean `not` operation",
+                            "remove the `!` and swap the blocks of the if/else",
+                        );
                     },
                     ExprKind::Binary(ref kind, _, _) if kind.node == BinOpKind::Ne => {
-                        span_help_and_lint(cx,
-                                           IF_NOT_ELSE,
-                                           item.span,
-                                           "Unnecessary `!=` operation",
-                                           "change to `==` and swap the blocks of the if/else");
+                        span_help_and_lint(
+                            cx,
+                            IF_NOT_ELSE,
+                            item.span,
+                            "Unnecessary `!=` operation",
+                            "change to `==` and swap the blocks of the if/else",
+                        );
                     },
                     _ => (),
                 }