fix: don't check for !x = y/x = !y

misc: rm "as shown" from help message - clippy guidelines recommend against this

misc: pull conditions into let-chain

misc: use `Span::to`

misc: inline `{l,r}_ty`

misc: move the type checks out of `check_comparison`

misc: make test cases much less verbose
This commit is contained in:
Ada Alakbarova 2025-08-15 12:42:47 +02:00
parent df0499a5ed
commit c2c3e0990b
No known key found for this signature in database
7 changed files with 216 additions and 439 deletions

View file

@ -7,7 +7,7 @@ use clippy_utils::{
};
use rustc_ast::ast::LitKind;
use rustc_errors::Applicability;
use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp};
use rustc_hir::{BinOpKind, Expr, ExprKind};
use rustc_lint::{LateContext, LateLintPass};
use rustc_session::declare_lint_pass;
use rustc_span::Span;
@ -232,7 +232,12 @@ impl<'tcx> LateLintPass<'tcx> for BoolComparison {
return;
}
if let ExprKind::Binary(Spanned { node, .. }, ..) = e.kind {
if let ExprKind::Binary(Spanned { node, .. }, left_side, right_side) = e.kind
&& is_expn_of(left_side.span, sym::cfg).is_none()
&& is_expn_of(right_side.span, sym::cfg).is_none()
&& cx.typeck_results().expr_ty(left_side).is_bool()
&& cx.typeck_results().expr_ty(right_side).is_bool()
{
let ignore_case = None::<(fn(_) -> _, &str)>;
let ignore_no_literal = None::<(fn(_, _) -> _, &str)>;
match node {
@ -288,30 +293,6 @@ impl<'tcx> LateLintPass<'tcx> for BoolComparison {
}
}
struct ExpressionInfoWithSpan {
one_side_is_unary_not: bool,
left_span: Span,
right_span: Span,
}
fn is_unary_not(e: &Expr<'_>) -> (bool, Span) {
if let ExprKind::Unary(UnOp::Not, operand) = e.kind {
return (true, operand.span);
}
(false, e.span)
}
fn one_side_is_unary_not<'tcx>(left_side: &'tcx Expr<'_>, right_side: &'tcx Expr<'_>) -> ExpressionInfoWithSpan {
let left = is_unary_not(left_side);
let right = is_unary_not(right_side);
ExpressionInfoWithSpan {
one_side_is_unary_not: left.0 != right.0,
left_span: left.1,
right_span: right.1,
}
}
fn check_comparison<'a, 'tcx>(
cx: &LateContext<'tcx>,
e: &'tcx Expr<'_>,
@ -321,81 +302,39 @@ fn check_comparison<'a, 'tcx>(
right_false: Option<(impl FnOnce(Sugg<'a>) -> Sugg<'a>, &'static str)>,
no_literal: Option<(impl FnOnce(Sugg<'a>, Sugg<'a>) -> Sugg<'a>, &'static str)>,
) {
if let ExprKind::Binary(op, left_side, right_side) = e.kind {
let (l_ty, r_ty) = (
cx.typeck_results().expr_ty(left_side),
cx.typeck_results().expr_ty(right_side),
);
if is_expn_of(left_side.span, sym::cfg).is_some() || is_expn_of(right_side.span, sym::cfg).is_some() {
return;
}
if l_ty.is_bool() && r_ty.is_bool() {
let mut applicability = Applicability::MachineApplicable;
// Eliminate parentheses in `e` by using the lo pos of lhs and hi pos of rhs,
// calling `source_callsite` make sure macros are handled correctly, see issue #9907
let binop_span = left_side
.span
.source_callsite()
.with_hi(right_side.span.source_callsite().hi());
if let ExprKind::Binary(_, left_side, right_side) = e.kind {
let mut applicability = Applicability::MachineApplicable;
// Eliminate parentheses in `e` by using the lo pos of lhs and hi pos of rhs,
// calling `source_callsite` make sure macros are handled correctly, see issue #9907
let binop_span = left_side.span.source_callsite().to(right_side.span.source_callsite());
if op.node == BinOpKind::Eq {
let expression_info = one_side_is_unary_not(left_side, right_side);
if expression_info.one_side_is_unary_not {
span_lint_and_sugg(
cx,
BOOL_COMPARISON,
binop_span,
"this comparison might be written more concisely",
"try simplifying it as shown",
format!(
"{} != {}",
snippet_with_applicability(
cx,
expression_info.left_span.source_callsite(),
"..",
&mut applicability
),
snippet_with_applicability(
cx,
expression_info.right_span.source_callsite(),
"..",
&mut applicability
)
),
applicability,
);
}
}
match (fetch_bool_expr(left_side), fetch_bool_expr(right_side)) {
(Some(true), None) => left_true.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, right_side, applicability, m, h);
}),
(None, Some(true)) => right_true.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, left_side, applicability, m, h);
}),
(Some(false), None) => left_false.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, right_side, applicability, m, h);
}),
(None, Some(false)) => right_false.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, left_side, applicability, m, h);
}),
(None, None) => no_literal.map_or((), |(h, m)| {
let left_side = Sugg::hir_with_context(cx, left_side, binop_span.ctxt(), "..", &mut applicability);
let right_side =
Sugg::hir_with_context(cx, right_side, binop_span.ctxt(), "..", &mut applicability);
span_lint_and_sugg(
cx,
BOOL_COMPARISON,
binop_span,
m,
"try simplifying it as shown",
h(left_side, right_side).into_string(),
applicability,
);
}),
_ => (),
}
match (fetch_bool_expr(left_side), fetch_bool_expr(right_side)) {
(Some(true), None) => left_true.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, right_side, applicability, m, h);
}),
(None, Some(true)) => right_true.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, left_side, applicability, m, h);
}),
(Some(false), None) => left_false.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, right_side, applicability, m, h);
}),
(None, Some(false)) => right_false.map_or((), |(h, m)| {
suggest_bool_comparison(cx, binop_span, left_side, applicability, m, h);
}),
(None, None) => no_literal.map_or((), |(h, m)| {
let left_side = Sugg::hir_with_context(cx, left_side, binop_span.ctxt(), "..", &mut applicability);
let right_side = Sugg::hir_with_context(cx, right_side, binop_span.ctxt(), "..", &mut applicability);
span_lint_and_sugg(
cx,
BOOL_COMPARISON,
binop_span,
m,
"try",
h(left_side, right_side).into_string(),
applicability,
);
}),
_ => (),
}
}
}
@ -414,7 +353,7 @@ fn suggest_bool_comparison<'a, 'tcx>(
BOOL_COMPARISON,
span,
message,
"try simplifying it as shown",
"try",
conv_hint(hint).into_string(),
app,
);

View file

@ -1,94 +1,39 @@
#![allow(non_local_definitions, clippy::needless_if)]
#![warn(clippy::bool_comparison)]
#![allow(clippy::non_canonical_partial_ord_impl, clippy::nonminimal_bool)]
#![allow(clippy::non_canonical_partial_ord_impl)]
fn main() {
let x = true;
if x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if !x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if !x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if !x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if !x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if !x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if !x {
//~^ bool_comparison
"yes"
} else {
"no"
};
let _ = if x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if !x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if !x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if !x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if !x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if !x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if !x { "yes" } else { "no" };
//~^ bool_comparison
let y = true;
if !x & y {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x & !y {
//~^ bool_comparison
"yes"
} else {
"no"
};
let _ = if !x & y { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x & !y { "yes" } else { "no" };
//~^ bool_comparison
}
fn issue3703() {
@ -126,25 +71,6 @@ fn issue3703() {
if false < Foo {}
}
fn issue4983() {
let a = true;
let b = false;
if a != b {};
//~^ bool_comparison
if a != b {};
//~^ bool_comparison
if a == b {};
if !a == !b {};
if b != a {};
//~^ bool_comparison
if b != a {};
//~^ bool_comparison
if b == a {};
if !b == !a {};
}
macro_rules! m {
($func:ident) => {
$func()
@ -193,10 +119,22 @@ fn issue9907() {
//~^ bool_comparison
// This is not part of the issue, but an unexpected found when fixing the issue,
// the provided span was inside of macro rather than the macro callsite.
let _ = ((1 < 2) != m!(func)) as usize;
let _ = ((1 < 2) & !m!(func)) as usize;
//~^ bool_comparison
}
#[allow(clippy::nonminimal_bool)]
fn issue15367() {
let a = true;
let b = false;
// these cases are handled by `nonminimal_bool`, so don't double-lint
if a == !b {};
if !a == b {};
if b == !a {};
if !b == a {};
}
fn issue15497() {
fn func() -> bool {
true

View file

@ -1,94 +1,39 @@
#![allow(non_local_definitions, clippy::needless_if)]
#![warn(clippy::bool_comparison)]
#![allow(clippy::non_canonical_partial_ord_impl, clippy::nonminimal_bool)]
#![allow(clippy::non_canonical_partial_ord_impl)]
fn main() {
let x = true;
if x == true {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x == false {
//~^ bool_comparison
"yes"
} else {
"no"
};
if true == x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if false == x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x != true {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x != false {
//~^ bool_comparison
"yes"
} else {
"no"
};
if true != x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if false != x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x < true {
//~^ bool_comparison
"yes"
} else {
"no"
};
if false < x {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x > false {
//~^ bool_comparison
"yes"
} else {
"no"
};
if true > x {
//~^ bool_comparison
"yes"
} else {
"no"
};
let _ = if x == true { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x == false { "yes" } else { "no" };
//~^ bool_comparison
let _ = if true == x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if false == x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x != true { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x != false { "yes" } else { "no" };
//~^ bool_comparison
let _ = if true != x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if false != x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x < true { "yes" } else { "no" };
//~^ bool_comparison
let _ = if false < x { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x > false { "yes" } else { "no" };
//~^ bool_comparison
let _ = if true > x { "yes" } else { "no" };
//~^ bool_comparison
let y = true;
if x < y {
//~^ bool_comparison
"yes"
} else {
"no"
};
if x > y {
//~^ bool_comparison
"yes"
} else {
"no"
};
let _ = if x < y { "yes" } else { "no" };
//~^ bool_comparison
let _ = if x > y { "yes" } else { "no" };
//~^ bool_comparison
}
fn issue3703() {
@ -126,25 +71,6 @@ fn issue3703() {
if false < Foo {}
}
fn issue4983() {
let a = true;
let b = false;
if a == !b {};
//~^ bool_comparison
if !a == b {};
//~^ bool_comparison
if a == b {};
if !a == !b {};
if b == !a {};
//~^ bool_comparison
if !b == a {};
//~^ bool_comparison
if b == a {};
if !b == !a {};
}
macro_rules! m {
($func:ident) => {
$func()
@ -193,10 +119,22 @@ fn issue9907() {
//~^ bool_comparison
// This is not part of the issue, but an unexpected found when fixing the issue,
// the provided span was inside of macro rather than the macro callsite.
let _ = ((1 < 2) == !m!(func)) as usize;
let _ = ((1 < 2) > m!(func)) as usize;
//~^ bool_comparison
}
#[allow(clippy::nonminimal_bool)]
fn issue15367() {
let a = true;
let b = false;
// these cases are handled by `nonminimal_bool`, so don't double-lint
if a == !b {};
if !a == b {};
if b == !a {};
if !b == a {};
}
fn issue15497() {
fn func() -> bool {
true

View file

@ -1,167 +1,143 @@
error: equality checks against true are unnecessary
--> tests/ui/bool_comparison.rs:7:8
--> tests/ui/bool_comparison.rs:7:16
|
LL | if x == true {
| ^^^^^^^^^ help: try simplifying it as shown: `x`
LL | let _ = if x == true { "yes" } else { "no" };
| ^^^^^^^^^ help: try: `x`
|
= note: `-D clippy::bool-comparison` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::bool_comparison)]`
error: equality checks against false can be replaced by a negation
--> tests/ui/bool_comparison.rs:13:8
--> tests/ui/bool_comparison.rs:9:16
|
LL | if x == false {
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
LL | let _ = if x == false { "yes" } else { "no" };
| ^^^^^^^^^^ help: try: `!x`
error: equality checks against true are unnecessary
--> tests/ui/bool_comparison.rs:19:8
--> tests/ui/bool_comparison.rs:11:16
|
LL | if true == x {
| ^^^^^^^^^ help: try simplifying it as shown: `x`
LL | let _ = if true == x { "yes" } else { "no" };
| ^^^^^^^^^ help: try: `x`
error: equality checks against false can be replaced by a negation
--> tests/ui/bool_comparison.rs:25:8
--> tests/ui/bool_comparison.rs:13:16
|
LL | if false == x {
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
LL | let _ = if false == x { "yes" } else { "no" };
| ^^^^^^^^^^ help: try: `!x`
error: inequality checks against true can be replaced by a negation
--> tests/ui/bool_comparison.rs:31:8
--> tests/ui/bool_comparison.rs:15:16
|
LL | if x != true {
| ^^^^^^^^^ help: try simplifying it as shown: `!x`
LL | let _ = if x != true { "yes" } else { "no" };
| ^^^^^^^^^ help: try: `!x`
error: inequality checks against false are unnecessary
--> tests/ui/bool_comparison.rs:37:8
--> tests/ui/bool_comparison.rs:17:16
|
LL | if x != false {
| ^^^^^^^^^^ help: try simplifying it as shown: `x`
LL | let _ = if x != false { "yes" } else { "no" };
| ^^^^^^^^^^ help: try: `x`
error: inequality checks against true can be replaced by a negation
--> tests/ui/bool_comparison.rs:43:8
--> tests/ui/bool_comparison.rs:19:16
|
LL | if true != x {
| ^^^^^^^^^ help: try simplifying it as shown: `!x`
LL | let _ = if true != x { "yes" } else { "no" };
| ^^^^^^^^^ help: try: `!x`
error: inequality checks against false are unnecessary
--> tests/ui/bool_comparison.rs:49:8
--> tests/ui/bool_comparison.rs:21:16
|
LL | if false != x {
| ^^^^^^^^^^ help: try simplifying it as shown: `x`
LL | let _ = if false != x { "yes" } else { "no" };
| ^^^^^^^^^^ help: try: `x`
error: less than comparison against true can be replaced by a negation
--> tests/ui/bool_comparison.rs:55:8
--> tests/ui/bool_comparison.rs:23:16
|
LL | if x < true {
| ^^^^^^^^ help: try simplifying it as shown: `!x`
LL | let _ = if x < true { "yes" } else { "no" };
| ^^^^^^^^ help: try: `!x`
error: greater than checks against false are unnecessary
--> tests/ui/bool_comparison.rs:61:8
--> tests/ui/bool_comparison.rs:25:16
|
LL | if false < x {
| ^^^^^^^^^ help: try simplifying it as shown: `x`
LL | let _ = if false < x { "yes" } else { "no" };
| ^^^^^^^^^ help: try: `x`
error: greater than checks against false are unnecessary
--> tests/ui/bool_comparison.rs:67:8
--> tests/ui/bool_comparison.rs:27:16
|
LL | if x > false {
| ^^^^^^^^^ help: try simplifying it as shown: `x`
LL | let _ = if x > false { "yes" } else { "no" };
| ^^^^^^^^^ help: try: `x`
error: less than comparison against true can be replaced by a negation
--> tests/ui/bool_comparison.rs:73:8
--> tests/ui/bool_comparison.rs:29:16
|
LL | if true > x {
| ^^^^^^^^ help: try simplifying it as shown: `!x`
LL | let _ = if true > x { "yes" } else { "no" };
| ^^^^^^^^ help: try: `!x`
error: order comparisons between booleans can be simplified
--> tests/ui/bool_comparison.rs:80:8
--> tests/ui/bool_comparison.rs:33:16
|
LL | if x < y {
| ^^^^^ help: try simplifying it as shown: `!x & y`
LL | let _ = if x < y { "yes" } else { "no" };
| ^^^^^ help: try: `!x & y`
error: order comparisons between booleans can be simplified
--> tests/ui/bool_comparison.rs:86:8
--> tests/ui/bool_comparison.rs:35:16
|
LL | if x > y {
| ^^^^^ help: try simplifying it as shown: `x & !y`
error: this comparison might be written more concisely
--> tests/ui/bool_comparison.rs:133:8
|
LL | if a == !b {};
| ^^^^^^^ help: try simplifying it as shown: `a != b`
error: this comparison might be written more concisely
--> tests/ui/bool_comparison.rs:135:8
|
LL | if !a == b {};
| ^^^^^^^ help: try simplifying it as shown: `a != b`
error: this comparison might be written more concisely
--> tests/ui/bool_comparison.rs:140:8
|
LL | if b == !a {};
| ^^^^^^^ help: try simplifying it as shown: `b != a`
error: this comparison might be written more concisely
--> tests/ui/bool_comparison.rs:142:8
|
LL | if !b == a {};
| ^^^^^^^ help: try simplifying it as shown: `b != a`
LL | let _ = if x > y { "yes" } else { "no" };
| ^^^^^ help: try: `x & !y`
error: equality checks against false can be replaced by a negation
--> tests/ui/bool_comparison.rs:166:8
--> tests/ui/bool_comparison.rs:92:8
|
LL | if false == m!(func) {}
| ^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!m!(func)`
| ^^^^^^^^^^^^^^^^^ help: try: `!m!(func)`
error: equality checks against false can be replaced by a negation
--> tests/ui/bool_comparison.rs:168:8
--> tests/ui/bool_comparison.rs:94:8
|
LL | if m!(func) == false {}
| ^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!m!(func)`
| ^^^^^^^^^^^^^^^^^ help: try: `!m!(func)`
error: equality checks against true are unnecessary
--> tests/ui/bool_comparison.rs:170:8
--> tests/ui/bool_comparison.rs:96:8
|
LL | if true == m!(func) {}
| ^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `m!(func)`
| ^^^^^^^^^^^^^^^^ help: try: `m!(func)`
error: equality checks against true are unnecessary
--> tests/ui/bool_comparison.rs:172:8
--> tests/ui/bool_comparison.rs:98:8
|
LL | if m!(func) == true {}
| ^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `m!(func)`
| ^^^^^^^^^^^^^^^^ help: try: `m!(func)`
error: equality checks against false can be replaced by a negation
--> tests/ui/bool_comparison.rs:190:14
--> tests/ui/bool_comparison.rs:116:14
|
LL | let _ = ((1 < 2) == false) as usize;
| ^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `1 >= 2`
| ^^^^^^^^^^^^^^^^ help: try: `1 >= 2`
error: equality checks against false can be replaced by a negation
--> tests/ui/bool_comparison.rs:192:14
--> tests/ui/bool_comparison.rs:118:14
|
LL | let _ = (false == m!(func)) as usize;
| ^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!m!(func)`
error: this comparison might be written more concisely
--> tests/ui/bool_comparison.rs:196:14
|
LL | let _ = ((1 < 2) == !m!(func)) as usize;
| ^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `(1 < 2) != m!(func)`
| ^^^^^^^^^^^^^^^^^ help: try: `!m!(func)`
error: order comparisons between booleans can be simplified
--> tests/ui/bool_comparison.rs:206:9
--> tests/ui/bool_comparison.rs:122:14
|
LL | let _ = ((1 < 2) > m!(func)) as usize;
| ^^^^^^^^^^^^^^^^^^ help: try: `(1 < 2) & !m!(func)`
error: order comparisons between booleans can be simplified
--> tests/ui/bool_comparison.rs:144:9
|
LL | x > m!(func)
| ^^^^^^^^^^^^ help: try simplifying it as shown: `x & !m!(func)`
| ^^^^^^^^^^^^ help: try: `x & !m!(func)`
error: order comparisons between booleans can be simplified
--> tests/ui/bool_comparison.rs:211:9
--> tests/ui/bool_comparison.rs:149:9
|
LL | x < m!(func)
| ^^^^^^^^^^^^ help: try simplifying it as shown: `!x & m!(func)`
| ^^^^^^^^^^^^ help: try: `!x & m!(func)`
error: aborting due to 27 previous errors
error: aborting due to 23 previous errors

View file

@ -135,7 +135,7 @@ error: equality checks against true are unnecessary
--> tests/ui/needless_bool/fixable.rs:157:8
|
LL | if x == true {};
| ^^^^^^^^^ help: try simplifying it as shown: `x`
| ^^^^^^^^^ help: try: `x`
|
= note: `-D clippy::bool-comparison` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::bool_comparison)]`
@ -144,19 +144,19 @@ error: equality checks against false can be replaced by a negation
--> tests/ui/needless_bool/fixable.rs:162:8
|
LL | if x == false {};
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
| ^^^^^^^^^^ help: try: `!x`
error: equality checks against true are unnecessary
--> tests/ui/needless_bool/fixable.rs:173:8
|
LL | if x == true {};
| ^^^^^^^^^ help: try simplifying it as shown: `x`
| ^^^^^^^^^ help: try: `x`
error: equality checks against false can be replaced by a negation
--> tests/ui/needless_bool/fixable.rs:175:8
|
LL | if x == false {};
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
| ^^^^^^^^^^ help: try: `!x`
error: this if-then-else expression returns a bool literal
--> tests/ui/needless_bool/fixable.rs:185:12

View file

@ -182,14 +182,12 @@ fn issue_5794() {
if !b == true {}
//~^ nonminimal_bool
//~| bool_comparison
//~| bool_comparison
if !b != true {}
//~^ nonminimal_bool
//~| bool_comparison
if true == !b {}
//~^ nonminimal_bool
//~| bool_comparison
//~| bool_comparison
if true != !b {}
//~^ nonminimal_bool
//~| bool_comparison

View file

@ -154,98 +154,86 @@ error: this boolean expression can be simplified
LL | if !b == true {}
| ^^^^^^^^^^ help: try: `b != true`
error: this comparison might be written more concisely
--> tests/ui/nonminimal_bool.rs:182:8
|
LL | if !b == true {}
| ^^^^^^^^^^ help: try simplifying it as shown: `b != true`
|
= note: `-D clippy::bool-comparison` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::bool_comparison)]`
error: equality checks against true are unnecessary
--> tests/ui/nonminimal_bool.rs:182:8
|
LL | if !b == true {}
| ^^^^^^^^^^ help: try simplifying it as shown: `!b`
| ^^^^^^^^^^ help: try: `!b`
|
= note: `-D clippy::bool-comparison` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::bool_comparison)]`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:186:8
--> tests/ui/nonminimal_bool.rs:185:8
|
LL | if !b != true {}
| ^^^^^^^^^^ help: try: `b == true`
error: inequality checks against true can be replaced by a negation
--> tests/ui/nonminimal_bool.rs:186:8
--> tests/ui/nonminimal_bool.rs:185:8
|
LL | if !b != true {}
| ^^^^^^^^^^ help: try simplifying it as shown: `b`
| ^^^^^^^^^^ help: try: `b`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:189:8
--> tests/ui/nonminimal_bool.rs:188:8
|
LL | if true == !b {}
| ^^^^^^^^^^ help: try: `true != b`
error: this comparison might be written more concisely
--> tests/ui/nonminimal_bool.rs:189:8
|
LL | if true == !b {}
| ^^^^^^^^^^ help: try simplifying it as shown: `true != b`
error: equality checks against true are unnecessary
--> tests/ui/nonminimal_bool.rs:189:8
--> tests/ui/nonminimal_bool.rs:188:8
|
LL | if true == !b {}
| ^^^^^^^^^^ help: try simplifying it as shown: `!b`
| ^^^^^^^^^^ help: try: `!b`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:193:8
--> tests/ui/nonminimal_bool.rs:191:8
|
LL | if true != !b {}
| ^^^^^^^^^^ help: try: `true == b`
error: inequality checks against true can be replaced by a negation
--> tests/ui/nonminimal_bool.rs:193:8
--> tests/ui/nonminimal_bool.rs:191:8
|
LL | if true != !b {}
| ^^^^^^^^^^ help: try simplifying it as shown: `b`
| ^^^^^^^^^^ help: try: `b`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:196:8
--> tests/ui/nonminimal_bool.rs:194:8
|
LL | if !b == !c {}
| ^^^^^^^^ help: try: `b == c`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:198:8
--> tests/ui/nonminimal_bool.rs:196:8
|
LL | if !b != !c {}
| ^^^^^^^^ help: try: `b != c`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:214:8
--> tests/ui/nonminimal_bool.rs:212:8
|
LL | if !(a < 2.0 && !b) {
| ^^^^^^^^^^^^^^^^ help: try: `a >= 2.0 || b`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:233:12
--> tests/ui/nonminimal_bool.rs:231:12
|
LL | if !(matches!(ty, TyKind::Ref(_, _, _)) && !is_mutable(&expr)) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!matches!(ty, TyKind::Ref(_, _, _)) || is_mutable(&expr)`
error: this boolean expression can be simplified
--> tests/ui/nonminimal_bool.rs:253:8
--> tests/ui/nonminimal_bool.rs:251:8
|
LL | if !S != true {}
| ^^^^^^^^^^ help: try: `S == true`
error: inequality checks against true can be replaced by a negation
--> tests/ui/nonminimal_bool.rs:253:8
--> tests/ui/nonminimal_bool.rs:251:8
|
LL | if !S != true {}
| ^^^^^^^^^^ help: try simplifying it as shown: `!!S`
| ^^^^^^^^^^ help: try: `!!S`
error: aborting due to 33 previous errors
error: aborting due to 31 previous errors