mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 21:23:56 +00:00
Add run-rustfix for needless_bool lint
This splits up the needless_bool tests into `fixable.rs` and `simple.rs`. `simple.rs` contains the code that triggers the lint diagnostic without a suggestion.
This commit is contained in:
parent
ea26a95fc9
commit
39c8f84f3b
5 changed files with 230 additions and 109 deletions
98
tests/ui/needless_bool/fixable.fixed
Normal file
98
tests/ui/needless_bool/fixable.fixed
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
#![warn(clippy::needless_bool)]
|
||||||
|
#![allow(
|
||||||
|
unused,
|
||||||
|
dead_code,
|
||||||
|
clippy::no_effect,
|
||||||
|
clippy::if_same_then_else,
|
||||||
|
clippy::needless_return
|
||||||
|
)]
|
||||||
|
|
||||||
|
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);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
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() };
|
||||||
|
}
|
|
@ -1,5 +1,13 @@
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
#![warn(clippy::needless_bool)]
|
#![warn(clippy::needless_bool)]
|
||||||
#![allow(unused, dead_code, clippy::no_effect)]
|
#![allow(
|
||||||
|
unused,
|
||||||
|
dead_code,
|
||||||
|
clippy::no_effect,
|
||||||
|
clippy::if_same_then_else,
|
||||||
|
clippy::needless_return
|
||||||
|
)]
|
||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
|
@ -25,20 +33,9 @@ macro_rules! bool_comparison_trigger {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::if_same_then_else)]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x = true;
|
let x = true;
|
||||||
let y = false;
|
let y = false;
|
||||||
if x {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
true
|
|
||||||
};
|
|
||||||
if x {
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
};
|
|
||||||
if x {
|
if x {
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
|
@ -59,36 +56,15 @@ fn main() {
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}; // would also be questionable, but we don't catch this yet
|
}; // would also be questionable, but we don't catch this yet
|
||||||
bool_ret(x);
|
|
||||||
bool_ret2(x);
|
|
||||||
bool_ret3(x);
|
bool_ret3(x);
|
||||||
bool_ret5(x, x);
|
|
||||||
bool_ret4(x);
|
bool_ret4(x);
|
||||||
|
bool_ret5(x, x);
|
||||||
bool_ret6(x, x);
|
bool_ret6(x, x);
|
||||||
needless_bool(x);
|
needless_bool(x);
|
||||||
needless_bool2(x);
|
needless_bool2(x);
|
||||||
needless_bool3(x);
|
needless_bool3(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::if_same_then_else, clippy::needless_return)]
|
|
||||||
fn bool_ret(x: bool) -> bool {
|
|
||||||
if x {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(clippy::if_same_then_else, clippy::needless_return)]
|
|
||||||
fn bool_ret2(x: bool) -> bool {
|
|
||||||
if x {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(clippy::needless_return)]
|
|
||||||
fn bool_ret3(x: bool) -> bool {
|
fn bool_ret3(x: bool) -> bool {
|
||||||
if x {
|
if x {
|
||||||
return true;
|
return true;
|
||||||
|
@ -97,16 +73,6 @@ fn bool_ret3(x: bool) -> bool {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::needless_return)]
|
|
||||||
fn bool_ret5(x: bool, y: bool) -> bool {
|
|
||||||
if x && y {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(clippy::needless_return)]
|
|
||||||
fn bool_ret4(x: bool) -> bool {
|
fn bool_ret4(x: bool) -> bool {
|
||||||
if x {
|
if x {
|
||||||
return false;
|
return false;
|
||||||
|
@ -115,7 +81,14 @@ fn bool_ret4(x: bool) -> bool {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::needless_return)]
|
fn bool_ret5(x: bool, y: bool) -> bool {
|
||||||
|
if x && y {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
fn bool_ret6(x: bool, y: bool) -> bool {
|
fn bool_ret6(x: bool, y: bool) -> bool {
|
||||||
if x && y {
|
if x && y {
|
||||||
return false;
|
return false;
|
|
@ -1,27 +1,5 @@
|
||||||
error: this if-then-else expression will always return true
|
|
||||||
--> $DIR/needless_bool.rs:32:5
|
|
||||||
|
|
|
||||||
LL | / if x {
|
|
||||||
LL | | true
|
|
||||||
LL | | } else {
|
|
||||||
LL | | true
|
|
||||||
LL | | };
|
|
||||||
| |_____^
|
|
||||||
|
|
|
||||||
= note: `-D clippy::needless-bool` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: this if-then-else expression will always return false
|
|
||||||
--> $DIR/needless_bool.rs:37:5
|
|
||||||
|
|
|
||||||
LL | / if x {
|
|
||||||
LL | | false
|
|
||||||
LL | | } else {
|
|
||||||
LL | | false
|
|
||||||
LL | | };
|
|
||||||
| |_____^
|
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:42:5
|
--> $DIR/fixable.rs:39:5
|
||||||
|
|
|
|
||||||
LL | / if x {
|
LL | / if x {
|
||||||
LL | | true
|
LL | | true
|
||||||
|
@ -29,9 +7,11 @@ LL | | } else {
|
||||||
LL | | false
|
LL | | false
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____^ help: you can reduce it to: `x`
|
| |_____^ help: you can reduce it to: `x`
|
||||||
|
|
|
||||||
|
= note: `-D clippy::needless-bool` implied by `-D warnings`
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:47:5
|
--> $DIR/fixable.rs:44:5
|
||||||
|
|
|
|
||||||
LL | / if x {
|
LL | / if x {
|
||||||
LL | | false
|
LL | | false
|
||||||
|
@ -41,7 +21,7 @@ LL | | };
|
||||||
| |_____^ help: you can reduce it to: `!x`
|
| |_____^ help: you can reduce it to: `!x`
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:52:5
|
--> $DIR/fixable.rs:49:5
|
||||||
|
|
|
|
||||||
LL | / if x && y {
|
LL | / if x && y {
|
||||||
LL | | false
|
LL | | false
|
||||||
|
@ -50,28 +30,8 @@ LL | | true
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____^ help: you can reduce it to: `!(x && y)`
|
| |_____^ help: you can reduce it to: `!(x && y)`
|
||||||
|
|
||||||
error: this if-then-else expression will always return true
|
|
||||||
--> $DIR/needless_bool.rs:75:5
|
|
||||||
|
|
|
||||||
LL | / if x {
|
|
||||||
LL | | return true;
|
|
||||||
LL | | } else {
|
|
||||||
LL | | return true;
|
|
||||||
LL | | };
|
|
||||||
| |_____^
|
|
||||||
|
|
||||||
error: this if-then-else expression will always return false
|
|
||||||
--> $DIR/needless_bool.rs:84:5
|
|
||||||
|
|
|
||||||
LL | / if x {
|
|
||||||
LL | | return false;
|
|
||||||
LL | | } else {
|
|
||||||
LL | | return false;
|
|
||||||
LL | | };
|
|
||||||
| |_____^
|
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:93:5
|
--> $DIR/fixable.rs:69:5
|
||||||
|
|
|
|
||||||
LL | / if x {
|
LL | / if x {
|
||||||
LL | | return true;
|
LL | | return true;
|
||||||
|
@ -81,17 +41,7 @@ LL | | };
|
||||||
| |_____^ help: you can reduce it to: `return x`
|
| |_____^ help: you can reduce it to: `return x`
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:102:5
|
--> $DIR/fixable.rs:77:5
|
||||||
|
|
|
||||||
LL | / if x && y {
|
|
||||||
LL | | return true;
|
|
||||||
LL | | } else {
|
|
||||||
LL | | return false;
|
|
||||||
LL | | };
|
|
||||||
| |_____^ help: you can reduce it to: `return x && y`
|
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
|
||||||
--> $DIR/needless_bool.rs:111:5
|
|
||||||
|
|
|
|
||||||
LL | / if x {
|
LL | / if x {
|
||||||
LL | | return false;
|
LL | | return false;
|
||||||
|
@ -101,7 +51,17 @@ LL | | };
|
||||||
| |_____^ help: you can reduce it to: `return !x`
|
| |_____^ help: you can reduce it to: `return !x`
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:120:5
|
--> $DIR/fixable.rs:85:5
|
||||||
|
|
|
||||||
|
LL | / if x && y {
|
||||||
|
LL | | return true;
|
||||||
|
LL | | } else {
|
||||||
|
LL | | return false;
|
||||||
|
LL | | };
|
||||||
|
| |_____^ help: you can reduce it to: `return x && y`
|
||||||
|
|
||||||
|
error: this if-then-else expression returns a bool literal
|
||||||
|
--> $DIR/fixable.rs:93:5
|
||||||
|
|
|
|
||||||
LL | / if x && y {
|
LL | / if x && y {
|
||||||
LL | | return false;
|
LL | | return false;
|
||||||
|
@ -111,7 +71,7 @@ LL | | };
|
||||||
| |_____^ help: you can reduce it to: `return !(x && y)`
|
| |_____^ help: you can reduce it to: `return !(x && y)`
|
||||||
|
|
||||||
error: equality checks against true are unnecessary
|
error: equality checks against true are unnecessary
|
||||||
--> $DIR/needless_bool.rs:128:8
|
--> $DIR/fixable.rs:101:8
|
||||||
|
|
|
|
||||||
LL | if x == true {};
|
LL | if x == true {};
|
||||||
| ^^^^^^^^^ help: try simplifying it as shown: `x`
|
| ^^^^^^^^^ help: try simplifying it as shown: `x`
|
||||||
|
@ -119,25 +79,25 @@ LL | if x == true {};
|
||||||
= note: `-D clippy::bool-comparison` implied by `-D warnings`
|
= note: `-D clippy::bool-comparison` implied by `-D warnings`
|
||||||
|
|
||||||
error: equality checks against false can be replaced by a negation
|
error: equality checks against false can be replaced by a negation
|
||||||
--> $DIR/needless_bool.rs:132:8
|
--> $DIR/fixable.rs:105:8
|
||||||
|
|
|
|
||||||
LL | if x == false {};
|
LL | if x == false {};
|
||||||
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
||||||
|
|
||||||
error: equality checks against true are unnecessary
|
error: equality checks against true are unnecessary
|
||||||
--> $DIR/needless_bool.rs:142:8
|
--> $DIR/fixable.rs:115:8
|
||||||
|
|
|
|
||||||
LL | if x == true {};
|
LL | if x == true {};
|
||||||
| ^^^^^^^^^ help: try simplifying it as shown: `x`
|
| ^^^^^^^^^ help: try simplifying it as shown: `x`
|
||||||
|
|
||||||
error: equality checks against false can be replaced by a negation
|
error: equality checks against false can be replaced by a negation
|
||||||
--> $DIR/needless_bool.rs:143:8
|
--> $DIR/fixable.rs:116:8
|
||||||
|
|
|
|
||||||
LL | if x == false {};
|
LL | if x == false {};
|
||||||
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
||||||
|
|
||||||
error: this if-then-else expression returns a bool literal
|
error: this if-then-else expression returns a bool literal
|
||||||
--> $DIR/needless_bool.rs:152:12
|
--> $DIR/fixable.rs:125:12
|
||||||
|
|
|
|
||||||
LL | } else if returns_bool() {
|
LL | } else if returns_bool() {
|
||||||
| ____________^
|
| ____________^
|
||||||
|
@ -147,5 +107,5 @@ LL | | true
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____^ help: you can reduce it to: `{ !returns_bool() }`
|
| |_____^ help: you can reduce it to: `{ !returns_bool() }`
|
||||||
|
|
||||||
error: aborting due to 16 previous errors
|
error: aborting due to 12 previous errors
|
||||||
|
|
46
tests/ui/needless_bool/simple.rs
Normal file
46
tests/ui/needless_bool/simple.rs
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#![warn(clippy::needless_bool)]
|
||||||
|
#![allow(
|
||||||
|
unused,
|
||||||
|
dead_code,
|
||||||
|
clippy::no_effect,
|
||||||
|
clippy::if_same_then_else,
|
||||||
|
clippy::needless_return
|
||||||
|
)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x = true;
|
||||||
|
let y = false;
|
||||||
|
if x {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
};
|
||||||
|
if x {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
if x {
|
||||||
|
x
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}; // would also be questionable, but we don't catch this yet
|
||||||
|
bool_ret(x);
|
||||||
|
bool_ret2(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bool_ret(x: bool) -> bool {
|
||||||
|
if x {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bool_ret2(x: bool) -> bool {
|
||||||
|
if x {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
44
tests/ui/needless_bool/simple.stderr
Normal file
44
tests/ui/needless_bool/simple.stderr
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
error: this if-then-else expression will always return true
|
||||||
|
--> $DIR/simple.rs:13:5
|
||||||
|
|
|
||||||
|
LL | / if x {
|
||||||
|
LL | | true
|
||||||
|
LL | | } else {
|
||||||
|
LL | | true
|
||||||
|
LL | | };
|
||||||
|
| |_____^
|
||||||
|
|
|
||||||
|
= note: `-D clippy::needless-bool` implied by `-D warnings`
|
||||||
|
|
||||||
|
error: this if-then-else expression will always return false
|
||||||
|
--> $DIR/simple.rs:18:5
|
||||||
|
|
|
||||||
|
LL | / if x {
|
||||||
|
LL | | false
|
||||||
|
LL | | } else {
|
||||||
|
LL | | false
|
||||||
|
LL | | };
|
||||||
|
| |_____^
|
||||||
|
|
||||||
|
error: this if-then-else expression will always return true
|
||||||
|
--> $DIR/simple.rs:33:5
|
||||||
|
|
|
||||||
|
LL | / if x {
|
||||||
|
LL | | return true;
|
||||||
|
LL | | } else {
|
||||||
|
LL | | return true;
|
||||||
|
LL | | };
|
||||||
|
| |_____^
|
||||||
|
|
||||||
|
error: this if-then-else expression will always return false
|
||||||
|
--> $DIR/simple.rs:41:5
|
||||||
|
|
|
||||||
|
LL | / if x {
|
||||||
|
LL | | return false;
|
||||||
|
LL | | } else {
|
||||||
|
LL | | return false;
|
||||||
|
LL | | };
|
||||||
|
| |_____^
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
Loading…
Reference in a new issue