put parentheses around neg_multiply suggestion if needed

This commit is contained in:
Marcel Hellwig 2022-06-20 23:44:18 +02:00
parent 93c6f9ebed
commit 6fc84d4da3
4 changed files with 27 additions and 2 deletions

View File

@ -1,7 +1,9 @@
use clippy_utils::consts::{self, Constant};
use clippy_utils::diagnostics::span_lint_and_sugg;
use clippy_utils::source::snippet_with_applicability;
use clippy_utils::sugg::has_enclosing_paren;
use if_chain::if_chain;
use rustc_ast::util::parser::PREC_PREFIX;
use rustc_errors::Applicability;
use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp};
use rustc_lint::{LateContext, LateLintPass};
@ -58,7 +60,12 @@ fn check_mul(cx: &LateContext<'_>, span: Span, lit: &Expr<'_>, exp: &Expr<'_>) {
then {
let mut applicability = Applicability::MachineApplicable;
let suggestion = format!("-{}", snippet_with_applicability(cx, exp.span, "..", &mut applicability));
let snip = snippet_with_applicability(cx, exp.span, "..", &mut applicability);
let suggestion = if exp.precedence().order() < PREC_PREFIX && !has_enclosing_paren(&snip) {
format!("-({})", snip)
} else {
format!("-{}", snip)
};
span_lint_and_sugg(
cx,
NEG_MULTIPLY,

View File

@ -38,6 +38,9 @@ fn main() {
0xcafe | -0xff00;
-(3_usize as i32);
-(3_usize as i32);
-1 * -1; // should be ok
X * -1; // should be ok

View File

@ -38,6 +38,9 @@ fn main() {
0xcafe | 0xff00 * -1;
3_usize as i32 * -1;
(3_usize as i32) * -1;
-1 * -1; // should be ok
X * -1; // should be ok

View File

@ -36,5 +36,17 @@ error: this multiplication by -1 can be written more succinctly
LL | 0xcafe | 0xff00 * -1;
| ^^^^^^^^^^^ help: consider using: `-0xff00`
error: aborting due to 6 previous errors
error: this multiplication by -1 can be written more succinctly
--> $DIR/neg_multiply.rs:41:5
|
LL | 3_usize as i32 * -1;
| ^^^^^^^^^^^^^^^^^^^ help: consider using: `-(3_usize as i32)`
error: this multiplication by -1 can be written more succinctly
--> $DIR/neg_multiply.rs:42:5
|
LL | (3_usize as i32) * -1;
| ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(3_usize as i32)`
error: aborting due to 8 previous errors