From 8f8ef0384b7539276cb14cda78e60be5d2c6cebb Mon Sep 17 00:00:00 2001 From: A4-Tacks Date: Fri, 5 Sep 2025 06:30:28 +0800 Subject: [PATCH] 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); } ``` --- .../src/handlers/replace_arith_op.rs | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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})")) + } }, ) } @@ -227,6 +231,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(