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
|
||||
&& let ExprKind::Unary(UnOp::Neg, ref inner2) = inner.kind
|
||||
&& !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(
|
||||
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