diff options
| author | A4-Tacks <wdsjxhno1001@163.com> | 2025-09-05 06:30:28 +0800 |
|---|---|---|
| committer | A4-Tacks <wdsjxhno1001@163.com> | 2025-09-05 06:30:28 +0800 |
| commit | ec34e8e69fb2e133e6ec0ebc87443f6fa8bda092 (patch) | |
| tree | f98a890a50e60ea4a949eee93553e33ef246b775 | |
| parent | ab5113a316959f2558f03a7bf590e967602f02df (diff) | |
| download | rust-ec34e8e69fb2e133e6ec0ebc87443f6fa8bda092.tar.gz rust-ec34e8e69fb2e133e6ec0ebc87443f6fa8bda092.zip | |
Fix precedence parenthesis for replace_arith_op
Example
---
```rust
fn main() {
let x = 1*x $0+ 2;
}
```
**Before this PR**:
```rust
fn main() {
let x = 1*x.wrapping_add(2);
}
```
**After this PR**:
```rust
fn main() {
let x = (1*x).wrapping_add(2);
}
```
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_arith_op.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_arith_op.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_arith_op.rs index 440ab4d4604..94ac1c342d3 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_arith_op.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_arith_op.rs @@ -88,7 +88,11 @@ fn replace_arith(acc: &mut Assists, ctx: &AssistContext<'_>, kind: ArithKind) -> |builder| { let method_name = kind.method_name(op); - builder.replace(range, format!("{lhs}.{method_name}({rhs})")) + if lhs.precedence().needs_parentheses_in(ast::prec::ExprPrecedence::Postfix) { + builder.replace(range, format!("({lhs}).{method_name}({rhs})")) + } else { + builder.replace(range, format!("{lhs}.{method_name}({rhs})")) + } }, ) } @@ -228,6 +232,23 @@ fn main() { } #[test] + fn replace_arith_with_wrapping_add_add_parenthesis() { + check_assist( + replace_arith_with_wrapping, + r#" +fn main() { + let x = 1*x $0+ 2; +} +"#, + r#" +fn main() { + let x = (1*x).wrapping_add(2); +} +"#, + ) + } + + #[test] fn replace_arith_not_applicable_with_non_empty_selection() { check_assist_not_applicable( replace_arith_with_checked, |
