]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/needless_bool.rs
Auto merge of #3603 - xfix:random-state-lint, r=phansch
[rust.git] / tests / ui / needless_bool.rs
index fb81d44308a0e8f08e9dc9f02f99f6813bbe0609..c82f102c294e45a76513343178fd1885e3d773f8 100644 (file)
-#![feature(plugin)]
-#![plugin(clippy)]
-#![deny(needless_bool)]
+// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
 
-#[allow(if_same_then_else)]
+#![warn(clippy::needless_bool)]
+
+use std::cell::Cell;
+
+macro_rules! bool_comparison_trigger {
+    ($($i:ident: $def:expr, $stb:expr );+  $(;)*) => (
+
+        #[derive(Clone)]
+        pub struct Trigger {
+            $($i: (Cell<bool>, bool, bool)),+
+        }
+
+        #[allow(dead_code)]
+        impl Trigger {
+            pub fn trigger(&self, key: &str) -> bool {
+                $(
+                    if let stringify!($i) = key {
+                        return self.$i.1 && self.$i.2 == $def;
+                    }
+                 )+
+                false
+            }
+        }
+    )
+}
+
+#[allow(clippy::if_same_then_else)]
 fn main() {
     let x = true;
     let y = false;
-    if x { true } else { true }; //~ERROR this if-then-else expression will always return true
-    if x { false } else { false }; //~ERROR this if-then-else expression will always return false
-    if x { true } else { false };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION x
-    if x { false } else { true };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION !x
-    if x && y { false } else { true };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION !(x && y)
-    if x { x } else { false }; // would also be questionable, but we don't catch this yet
+    if x {
+        true
+    } else {
+        true
+    };
+    if x {
+        false
+    } else {
+        false
+    };
+    if x {
+        true
+    } else {
+        false
+    };
+    if x {
+        false
+    } else {
+        true
+    };
+    if x && y {
+        false
+    } else {
+        true
+    };
+    if x {
+        x
+    } else {
+        false
+    }; // would also be questionable, but we don't catch this yet
     bool_ret(x);
     bool_ret2(x);
     bool_ret3(x);
     bool_ret5(x, x);
     bool_ret4(x);
     bool_ret6(x, x);
+    needless_bool(x);
+    needless_bool2(x);
+    needless_bool3(x);
 }
 
-#[allow(if_same_then_else, needless_return)]
+#[allow(clippy::if_same_then_else, clippy::needless_return)]
 fn bool_ret(x: bool) -> bool {
-    if x { return true } else { return true };
-    //~^ ERROR this if-then-else expression will always return true
+    if x {
+        return true;
+    } else {
+        return true;
+    };
 }
 
-#[allow(if_same_then_else, needless_return)]
+#[allow(clippy::if_same_then_else, clippy::needless_return)]
 fn bool_ret2(x: bool) -> bool {
-    if x { return false } else { return false };
-    //~^ ERROR this if-then-else expression will always return false
+    if x {
+        return false;
+    } else {
+        return false;
+    };
 }
 
-#[allow(needless_return)]
+#[allow(clippy::needless_return)]
 fn bool_ret3(x: bool) -> bool {
-    if x { return true } else { return false };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION return x
+    if x {
+        return true;
+    } else {
+        return false;
+    };
 }
 
-#[allow(needless_return)]
+#[allow(clippy::needless_return)]
 fn bool_ret5(x: bool, y: bool) -> bool {
-    if x && y { return true } else { return false };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION return x && y
+    if x && y {
+        return true;
+    } else {
+        return false;
+    };
 }
 
-#[allow(needless_return)]
+#[allow(clippy::needless_return)]
 fn bool_ret4(x: bool) -> bool {
-    if x { return false } else { return true };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION return !x
+    if x {
+        return false;
+    } else {
+        return true;
+    };
 }
 
-#[allow(needless_return)]
+#[allow(clippy::needless_return)]
 fn bool_ret6(x: bool, y: bool) -> bool {
-    if x && y { return false } else { return true };
-    //~^ ERROR this if-then-else expression returns a bool literal
-    //~| HELP you can reduce it to
-    //~| SUGGESTION return !(x && y)
+    if x && y {
+        return false;
+    } else {
+        return true;
+    };
+}
+
+fn needless_bool(x: bool) {
+    if x == true {};
+}
+
+fn needless_bool2(x: bool) {
+    if x == false {};
+}
+
+fn needless_bool3(x: bool) {
+    bool_comparison_trigger! {
+        test_one:   false, false;
+        test_three: false, false;
+        test_two:   true, true;
+    }
+
+    if x == true {};
+    if x == false {};
 }