]> git.lizzy.rs Git - rust.git/blob - tests/ui/needless_bool.rs
Fix needless_bool suggestion with if-else-if-else
[rust.git] / tests / ui / needless_bool.rs
1 #![warn(clippy::needless_bool)]
2 #![allow(unused, dead_code, clippy::no_effect)]
3
4 use std::cell::Cell;
5
6 macro_rules! bool_comparison_trigger {
7     ($($i:ident: $def:expr, $stb:expr );+  $(;)*) => (
8
9         #[derive(Clone)]
10         pub struct Trigger {
11             $($i: (Cell<bool>, bool, bool)),+
12         }
13
14         #[allow(dead_code)]
15         impl Trigger {
16             pub fn trigger(&self, key: &str) -> bool {
17                 $(
18                     if let stringify!($i) = key {
19                         return self.$i.1 && self.$i.2 == $def;
20                     }
21                  )+
22                 false
23             }
24         }
25     )
26 }
27
28 #[allow(clippy::if_same_then_else)]
29 fn main() {
30     let x = true;
31     let y = false;
32     if x {
33         true
34     } else {
35         true
36     };
37     if x {
38         false
39     } else {
40         false
41     };
42     if x {
43         true
44     } else {
45         false
46     };
47     if x {
48         false
49     } else {
50         true
51     };
52     if x && y {
53         false
54     } else {
55         true
56     };
57     if x {
58         x
59     } else {
60         false
61     }; // would also be questionable, but we don't catch this yet
62     bool_ret(x);
63     bool_ret2(x);
64     bool_ret3(x);
65     bool_ret5(x, x);
66     bool_ret4(x);
67     bool_ret6(x, x);
68     needless_bool(x);
69     needless_bool2(x);
70     needless_bool3(x);
71 }
72
73 #[allow(clippy::if_same_then_else, clippy::needless_return)]
74 fn bool_ret(x: bool) -> bool {
75     if x {
76         return true;
77     } else {
78         return true;
79     };
80 }
81
82 #[allow(clippy::if_same_then_else, clippy::needless_return)]
83 fn bool_ret2(x: bool) -> bool {
84     if x {
85         return false;
86     } else {
87         return false;
88     };
89 }
90
91 #[allow(clippy::needless_return)]
92 fn bool_ret3(x: bool) -> bool {
93     if x {
94         return true;
95     } else {
96         return false;
97     };
98 }
99
100 #[allow(clippy::needless_return)]
101 fn bool_ret5(x: bool, y: bool) -> bool {
102     if x && y {
103         return true;
104     } else {
105         return false;
106     };
107 }
108
109 #[allow(clippy::needless_return)]
110 fn bool_ret4(x: bool) -> bool {
111     if x {
112         return false;
113     } else {
114         return true;
115     };
116 }
117
118 #[allow(clippy::needless_return)]
119 fn bool_ret6(x: bool, y: bool) -> bool {
120     if x && y {
121         return false;
122     } else {
123         return true;
124     };
125 }
126
127 fn needless_bool(x: bool) {
128     if x == true {};
129 }
130
131 fn needless_bool2(x: bool) {
132     if x == false {};
133 }
134
135 fn needless_bool3(x: bool) {
136     bool_comparison_trigger! {
137         test_one:   false, false;
138         test_three: false, false;
139         test_two:   true, true;
140     }
141
142     if x == true {};
143     if x == false {};
144 }
145
146 fn needless_bool_in_the_suggestion_wraps_the_predicate_of_if_else_statement_in_brackets() {
147     let b = false;
148     let returns_bool = || false;
149
150     let x = if b {
151         true
152     } else if returns_bool() {
153         false
154     } else {
155         true
156     };
157 }