diff options
| author | llogiq <bogusandre@gmail.com> | 2025-07-06 15:14:39 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-06 15:14:39 +0000 |
| commit | cd679d6b84b7ccf4548b2e3847753faa2e054106 (patch) | |
| tree | 2fd1738316c6d9ca85d8bf444a44f7f8c4ff8415 /tests | |
| parent | 2713c509de774264a594e676eeae27ac9e57df16 (diff) | |
| parent | e7fa5364c67dbd45a92432678878d406ad715630 (diff) | |
| download | rust-cd679d6b84b7ccf4548b2e3847753faa2e054106.tar.gz rust-cd679d6b84b7ccf4548b2e3847753faa2e054106.zip | |
FIX: NegMultiply should preserve parenthesis when method is called (#15179)
Hi, I noticed that the lint [neg_multiply](https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply) generates bad code when we call a method on the expression. Consider `((a.delta - 0.5).abs() * -1.0).total_cmp(&1.0)`. Currently this would be changed by clippy to `-(a.delta - 0.5).abs() .total_cmp(&1.0)` - which does not compile because we are trying to negate an ordering enum - but what we really want is `(-(a.delta - 0.5).abs()).total_cmp(&1.0)`. This PR fixes this. changelog: [`neg_multiply`] does not remove parenthesis anymore if a method is being called on the affected expression NOTE: This is the first time I am contributing to clippy or the rust repo in general. So I am not sure whether my approach to fixing this issue is goo, if there are better solutions or if I missed something. Thanks & hope you have a good day, Dario
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/neg_multiply.fixed | 12 | ||||
| -rw-r--r-- | tests/ui/neg_multiply.rs | 12 | ||||
| -rw-r--r-- | tests/ui/neg_multiply.stderr | 8 |
3 files changed, 31 insertions, 1 deletions
diff --git a/tests/ui/neg_multiply.fixed b/tests/ui/neg_multiply.fixed index ff6e08300e2..32d466e88fc 100644 --- a/tests/ui/neg_multiply.fixed +++ b/tests/ui/neg_multiply.fixed @@ -82,3 +82,15 @@ fn float() { -1.0 * -1.0; // should be ok } + +struct Y { + delta: f64, +} + +fn nested() { + let a = Y { delta: 1.0 }; + let b = Y { delta: 1.0 }; + let _ = (-(a.delta - 0.5).abs()).total_cmp(&1.0); + //~^ neg_multiply + let _ = (-(a.delta - 0.5).abs()).total_cmp(&1.0); +} diff --git a/tests/ui/neg_multiply.rs b/tests/ui/neg_multiply.rs index b0f4e85c78e..241a72c6d99 100644 --- a/tests/ui/neg_multiply.rs +++ b/tests/ui/neg_multiply.rs @@ -82,3 +82,15 @@ fn float() { -1.0 * -1.0; // should be ok } + +struct Y { + delta: f64, +} + +fn nested() { + let a = Y { delta: 1.0 }; + let b = Y { delta: 1.0 }; + let _ = ((a.delta - 0.5).abs() * -1.0).total_cmp(&1.0); + //~^ neg_multiply + let _ = (-(a.delta - 0.5).abs()).total_cmp(&1.0); +} diff --git a/tests/ui/neg_multiply.stderr b/tests/ui/neg_multiply.stderr index 2ef7e32ce05..f4fb6d3ce54 100644 --- a/tests/ui/neg_multiply.stderr +++ b/tests/ui/neg_multiply.stderr @@ -97,5 +97,11 @@ error: this multiplication by -1 can be written more succinctly LL | (3.0_f32 as f64) * -1.0; | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(3.0_f32 as f64)` -error: aborting due to 16 previous errors +error: this multiplication by -1 can be written more succinctly + --> tests/ui/neg_multiply.rs:93:13 + | +LL | let _ = ((a.delta - 0.5).abs() * -1.0).total_cmp(&1.0); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(-(a.delta - 0.5).abs())` + +error: aborting due to 17 previous errors |
