fix: false positive double_negations when it jumps macro boundary
This commit is contained in:
@@ -1584,6 +1584,8 @@ impl EarlyLintPass for DoubleNegations {
|
|||||||
if let ExprKind::Unary(UnOp::Neg, ref inner) = expr.kind
|
if let ExprKind::Unary(UnOp::Neg, ref inner) = expr.kind
|
||||||
&& let ExprKind::Unary(UnOp::Neg, ref inner2) = inner.kind
|
&& let ExprKind::Unary(UnOp::Neg, ref inner2) = inner.kind
|
||||||
&& !matches!(inner2.kind, ExprKind::Unary(UnOp::Neg, _))
|
&& !matches!(inner2.kind, ExprKind::Unary(UnOp::Neg, _))
|
||||||
|
// Don't lint if this jumps macro expansion boundary (Issue #143980)
|
||||||
|
&& expr.span.eq_ctxt(inner.span)
|
||||||
{
|
{
|
||||||
cx.emit_span_lint(
|
cx.emit_span_lint(
|
||||||
DOUBLE_NEGATIONS,
|
DOUBLE_NEGATIONS,
|
||||||
|
|||||||
16
tests/ui/lint/lint-double-negations-macro.rs
Normal file
16
tests/ui/lint/lint-double-negations-macro.rs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//@ check-pass
|
||||||
|
macro_rules! neg {
|
||||||
|
($e: expr) => {
|
||||||
|
-$e
|
||||||
|
};
|
||||||
|
}
|
||||||
|
macro_rules! bad_macro {
|
||||||
|
($e: expr) => {
|
||||||
|
--$e //~ WARN use of a double negation
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
neg!(-1);
|
||||||
|
bad_macro!(1);
|
||||||
|
}
|
||||||
20
tests/ui/lint/lint-double-negations-macro.stderr
Normal file
20
tests/ui/lint/lint-double-negations-macro.stderr
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
warning: use of a double negation
|
||||||
|
--> $DIR/lint-double-negations-macro.rs:9:9
|
||||||
|
|
|
||||||
|
LL | --$e
|
||||||
|
| ^^^^
|
||||||
|
...
|
||||||
|
LL | bad_macro!(1);
|
||||||
|
| ------------- in this macro invocation
|
||||||
|
|
|
||||||
|
= note: the prefix `--` could be misinterpreted as a decrement operator which exists in other languages
|
||||||
|
= note: use `-= 1` if you meant to decrement the value
|
||||||
|
= note: `#[warn(double_negations)]` on by default
|
||||||
|
= note: this warning originates in the macro `bad_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
help: add parentheses for clarity
|
||||||
|
|
|
||||||
|
LL | -(-$e)
|
||||||
|
| + +
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
||||||
Reference in New Issue
Block a user