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