Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #20611 from A4-Tacks/replace-arith-op-prec
Fix precedence parenthesis for replace_arith_op
Shoyu Vanilla (Flint) 7 months ago
parent 084c1e5 · parent 8f8ef03 · commit 6135c07
-rw-r--r--crates/ide-assists/src/handlers/replace_arith_op.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/replace_arith_op.rs b/crates/ide-assists/src/handlers/replace_arith_op.rs
index 440ab4d460..94ac1c342d 100644
--- a/crates/ide-assists/src/handlers/replace_arith_op.rs
+++ b/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,