Skip to content

Commit

Permalink
Auto merge of #5079 - JohnTitor:fix-eq-op, r=flip1995
Browse files Browse the repository at this point in the history
Ignore macros with `!` operators in `eq_op`

`SpanlessEq::eq_expr` doesn't ignore macros with `!` operators and I'm not sure we should ignore there, so I ignore in `eq_op` (and `op_ref`).

Fixes #5077

changelog: Fix false positive in `eq_op`
  • Loading branch information
bors committed Jan 22, 2020
2 parents 3e74853 + a7d58ed commit eff3bc5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
14 changes: 13 additions & 1 deletion clippy_lints/src/eq_op.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
use crate::utils::{implements_trait, is_copy, multispan_sugg, snippet, span_lint, span_lint_and_then, SpanlessEq};
use crate::utils::{
implements_trait, in_macro, is_copy, multispan_sugg, snippet, span_lint, span_lint_and_then, SpanlessEq,
};
use rustc_errors::Applicability;
use rustc_hir::*;
use rustc_lint::{LateContext, LateLintPass};
Expand Down Expand Up @@ -53,6 +55,16 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for EqOp {
if e.span.from_expansion() {
return;
}
let macro_with_not_op = |expr_kind: &ExprKind<'_>| {
if let ExprKind::Unary(_, ref expr) = *expr_kind {
in_macro(expr.span)
} else {
false
}
};
if macro_with_not_op(&left.kind) || macro_with_not_op(&right.kind) {
return;
}
if is_valid_operator(op) && SpanlessEq::new(cx).ignore_fn().eq_expr(left, right) {
span_lint(
cx,
Expand Down
9 changes: 9 additions & 0 deletions tests/ui/eq_op.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,15 @@ macro_rules! check_if_named_foo {
)
}

macro_rules! bool_macro {
($expression:expr) => {
true
};
}

#[allow(clippy::short_circuit_statement)]
fn check_ignore_macro() {
check_if_named_foo!(foo);
// checks if the lint ignores macros with `!` operator
!bool_macro!(1) && !bool_macro!("");
}

0 comments on commit eff3bc5

Please sign in to comment.