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:
parent
df0499a5ed
commit
c2c3e0990b
7 changed files with 216 additions and 439 deletions
|
|
@ -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,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue