Make eq_op
suggest .is_nan()
This commit is contained in:
parent
2c40b99d08
commit
efac83813d
@ -1,4 +1,4 @@
|
||||
use clippy_utils::diagnostics::span_lint;
|
||||
use clippy_utils::diagnostics::{span_lint, span_lint_and_then};
|
||||
use clippy_utils::macros::{find_assert_eq_args, first_node_macro_backtrace};
|
||||
use clippy_utils::{ast_utils::is_useless_with_eq_exprs, eq_expr_value, is_in_test_function};
|
||||
use rustc_hir::{BinOpKind, Expr};
|
||||
@ -35,11 +35,16 @@ pub(crate) fn check<'tcx>(
|
||||
right: &'tcx Expr<'_>,
|
||||
) {
|
||||
if is_useless_with_eq_exprs(op.into()) && eq_expr_value(cx, left, right) && !is_in_test_function(cx.tcx, e.hir_id) {
|
||||
span_lint(
|
||||
span_lint_and_then(
|
||||
cx,
|
||||
EQ_OP,
|
||||
e.span,
|
||||
&format!("equal expressions as operands to `{}`", op.as_str()),
|
||||
|diag| {
|
||||
if let BinOpKind::Ne = op && cx.typeck_results().expr_ty(left).is_floating_point() {
|
||||
diag.note("if you intended to check if the operand is NaN, use `.is_nan()` instead");
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,8 @@ fn main() {
|
||||
let _ = false != false;
|
||||
let _ = 1.5 < 1.5;
|
||||
let _ = 1u64 >= 1u64;
|
||||
let x = f32::NAN;
|
||||
let _ = x != x;
|
||||
|
||||
// casts, methods, parentheses
|
||||
let _ = (1u32 as u64) & (1u32 as u64);
|
||||
|
@ -30,143 +30,151 @@ error: equal expressions as operands to `>=`
|
||||
LL | let _ = 1u64 >= 1u64;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `!=`
|
||||
--> $DIR/eq_op.rs:14:13
|
||||
|
|
||||
LL | let _ = x != x;
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: if you intended to check if the operand is NaN, use `.is_nan()` instead
|
||||
|
||||
error: equal expressions as operands to `&`
|
||||
--> $DIR/eq_op.rs:15:13
|
||||
--> $DIR/eq_op.rs:17:13
|
||||
|
|
||||
LL | let _ = (1u32 as u64) & (1u32 as u64);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `^`
|
||||
--> $DIR/eq_op.rs:18:17
|
||||
--> $DIR/eq_op.rs:20:17
|
||||
|
|
||||
LL | let _ = 1 ^ ((((((1))))));
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `<`
|
||||
--> $DIR/eq_op.rs:22:13
|
||||
--> $DIR/eq_op.rs:24:13
|
||||
|
|
||||
LL | let _ = (-(2) < -(2));
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:23:13
|
||||
--> $DIR/eq_op.rs:25:13
|
||||
|
|
||||
LL | let _ = ((1 + 1) & (1 + 1) == (1 + 1) & (1 + 1));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&`
|
||||
--> $DIR/eq_op.rs:23:14
|
||||
--> $DIR/eq_op.rs:25:14
|
||||
|
|
||||
LL | let _ = ((1 + 1) & (1 + 1) == (1 + 1) & (1 + 1));
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&`
|
||||
--> $DIR/eq_op.rs:23:35
|
||||
--> $DIR/eq_op.rs:25:35
|
||||
|
|
||||
LL | let _ = ((1 + 1) & (1 + 1) == (1 + 1) & (1 + 1));
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:24:13
|
||||
--> $DIR/eq_op.rs:26:13
|
||||
|
|
||||
LL | let _ = (1 * 2) + (3 * 4) == 1 * 2 + 3 * 4;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `!=`
|
||||
--> $DIR/eq_op.rs:27:13
|
||||
--> $DIR/eq_op.rs:29:13
|
||||
|
|
||||
LL | let _ = ([1] != [1]);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `!=`
|
||||
--> $DIR/eq_op.rs:28:13
|
||||
--> $DIR/eq_op.rs:30:13
|
||||
|
|
||||
LL | let _ = ((1, 2) != (1, 2));
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:32:13
|
||||
--> $DIR/eq_op.rs:34:13
|
||||
|
|
||||
LL | let _ = 1 + 1 == 2;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:33:13
|
||||
--> $DIR/eq_op.rs:35:13
|
||||
|
|
||||
LL | let _ = 1 - 1 == 0;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `-`
|
||||
--> $DIR/eq_op.rs:33:13
|
||||
--> $DIR/eq_op.rs:35:13
|
||||
|
|
||||
LL | let _ = 1 - 1 == 0;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `-`
|
||||
--> $DIR/eq_op.rs:35:13
|
||||
--> $DIR/eq_op.rs:37:13
|
||||
|
|
||||
LL | let _ = 1 - 1;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `/`
|
||||
--> $DIR/eq_op.rs:36:13
|
||||
--> $DIR/eq_op.rs:38:13
|
||||
|
|
||||
LL | let _ = 1 / 1;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:37:13
|
||||
--> $DIR/eq_op.rs:39:13
|
||||
|
|
||||
LL | let _ = true && true;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `||`
|
||||
--> $DIR/eq_op.rs:39:13
|
||||
--> $DIR/eq_op.rs:41:13
|
||||
|
|
||||
LL | let _ = true || true;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:44:13
|
||||
--> $DIR/eq_op.rs:46:13
|
||||
|
|
||||
LL | let _ = a == b && b == a;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:45:13
|
||||
--> $DIR/eq_op.rs:47:13
|
||||
|
|
||||
LL | let _ = a != b && b != a;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:46:13
|
||||
--> $DIR/eq_op.rs:48:13
|
||||
|
|
||||
LL | let _ = a < b && b > a;
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:47:13
|
||||
--> $DIR/eq_op.rs:49:13
|
||||
|
|
||||
LL | let _ = a <= b && b >= a;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:50:13
|
||||
--> $DIR/eq_op.rs:52:13
|
||||
|
|
||||
LL | let _ = a == a;
|
||||
| ^^^^^^
|
||||
|
||||
error: equal expressions as operands to `/`
|
||||
--> $DIR/eq_op.rs:60:20
|
||||
--> $DIR/eq_op.rs:62:20
|
||||
|
|
||||
LL | const D: u32 = A / A;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:91:5
|
||||
--> $DIR/eq_op.rs:93:5
|
||||
|
|
||||
LL | (n1.inner.0).0 == (n1.inner.0).0 && (n1.inner.1).0 == (n2.inner.1).0 && (n1.inner.2).0 == (n2.inner.2).0
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 28 previous errors
|
||||
error: aborting due to 29 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user