Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22898 from A4-Tacks/invert-general-needs-paren
fix: add parentheses for invert general expression
| -rw-r--r-- | crates/ide-assists/src/handlers/invert_if.rs | 9 | ||||
| -rw-r--r-- | crates/ide-assists/src/utils.rs | 4 |
2 files changed, 12 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/invert_if.rs b/crates/ide-assists/src/handlers/invert_if.rs index 9dda4bbb96..f50ccc3e11 100644 --- a/crates/ide-assists/src/handlers/invert_if.rs +++ b/crates/ide-assists/src/handlers/invert_if.rs @@ -115,6 +115,15 @@ mod tests { } #[test] + fn invert_if_general_case_needs_paren() { + check_assist( + invert_if, + "fn f() { i$0f cond as bool { 3 * 2 } else { 1 } }", + "fn f() { if !(cond as bool) { 1 } else { 3 * 2 } }", + ) + } + + #[test] fn invert_if_on_else_keyword() { check_assist( invert_if, diff --git a/crates/ide-assists/src/utils.rs b/crates/ide-assists/src/utils.rs index 344beb32ae..670a030255 100644 --- a/crates/ide-assists/src/utils.rs +++ b/crates/ide-assists/src/utils.rs @@ -303,7 +303,9 @@ pub(crate) fn vis_offset(node: &SyntaxNode) -> TextSize { } pub(crate) fn invert_boolean_expression(make: &SyntaxFactory, expr: ast::Expr) -> ast::Expr { - invert_special_case(make, &expr).unwrap_or_else(|| make.expr_prefix(T![!], expr).into()) + invert_special_case(make, &expr).unwrap_or_else(|| { + make.expr_prefix(T![!], wrap_paren(expr, make, ExprPrecedence::Prefix)).into() + }) } fn invert_special_case(make: &SyntaxFactory, expr: &ast::Expr) -> Option<ast::Expr> { |