summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/needless_bool/fixable.fixed
blob: 89dc13fd5b13d20077cfeecb305ea35fa20dcc2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// run-rustfix

#![warn(clippy::needless_bool)]
#![allow(
    unused,
    dead_code,
    clippy::no_effect,
    clippy::if_same_then_else,
    clippy::equatable_if_let,
    clippy::needless_return,
    clippy::self_named_constructors
)]

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
            }
        }
    )
}

fn main() {
    let x = true;
    let y = false;
    x;
    !x;
    !(x && y);
    let a = 0;
    let b = 1;

    a != b;
    a == b;
    a >= b;
    a > b;
    a <= b;
    a < b;
    if x {
        x
    } else {
        false
    }; // would also be questionable, but we don't catch this yet
    bool_ret3(x);
    bool_ret4(x);
    bool_ret5(x, x);
    bool_ret6(x, x);
    needless_bool(x);
    needless_bool2(x);
    needless_bool3(x);
    needless_bool_condition();
}

fn bool_ret3(x: bool) -> bool {
    return x;
}

fn bool_ret4(x: bool) -> bool {
    return !x;
}

fn bool_ret5(x: bool, y: bool) -> bool {
    return x && y;
}

fn bool_ret6(x: bool, y: bool) -> bool {
    return !(x && y);
}

fn needless_bool(x: bool) {
    if x {};
}

fn needless_bool2(x: bool) {
    if !x {};
}

fn needless_bool3(x: bool) {
    bool_comparison_trigger! {
        test_one:   false, false;
        test_three: false, false;
        test_two:   true, true;
    }

    if x {};
    if !x {};
}

fn needless_bool_in_the_suggestion_wraps_the_predicate_of_if_else_statement_in_brackets() {
    let b = false;
    let returns_bool = || false;

    let x = if b {
        true
    } else { !returns_bool() };
}

unsafe fn no(v: u8) -> u8 {
    v
}

#[allow(clippy::unnecessary_operation)]
fn needless_bool_condition() -> bool {
    (unsafe { no(4) } & 1 != 0);
    let _brackets_unneeded = unsafe { no(4) } & 1 != 0;
    fn foo() -> bool {
        // parentheses are needed here
        (unsafe { no(4) } & 1 != 0)
    }

    foo()
}