Skip to content

Commit c9892f6

Browse files
committed
fix: Enhance remove_parentheses assist to handle return expressions
1 parent 8b45966 commit c9892f6

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

crates/ide-assists/src/handlers/remove_parentheses.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use syntax::{
2-
AstNode, SyntaxKind, T,
2+
AstNode, Direction, SyntaxKind, T,
3+
algo::skip_trivia_token,
34
ast::{self, syntax_factory::SyntaxFactory},
45
syntax_editor::Position,
56
};
@@ -33,6 +34,16 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
3334

3435
let expr = parens.expr()?;
3536

37+
if let ast::Expr::ReturnExpr(ret) = &expr
38+
&& ret.expr().is_none()
39+
&& let Some(r_paren) = parens.r_paren_token()
40+
&& let Some(next) = r_paren.next_token().and_then(|t| skip_trivia_token(t, Direction::Next))
41+
&& next.kind() == T![||]
42+
{
43+
cov_mark::hit!(remove_parens_return_closure);
44+
return None;
45+
}
46+
3647
let parent = parens.syntax().parent()?;
3748
if expr.needs_parens_in(&parent) {
3849
return None;
@@ -247,6 +258,24 @@ mod tests {
247258
);
248259
}
249260

261+
#[test]
262+
fn remove_parens_return_in_unary_not() {
263+
cov_mark::check!(remove_parens_return_closure);
264+
check_assist_not_applicable(
265+
remove_parentheses,
266+
r#"fn main() { let _x = true && !$0(return) || true; }"#,
267+
);
268+
}
269+
270+
#[test]
271+
fn remove_parens_return_in_disjunction_is_ok() {
272+
check_assist(
273+
remove_parentheses,
274+
r#"fn f() { let _ = true || $0(return); }"#,
275+
r#"fn f() { let _ = true || return; }"#,
276+
);
277+
}
278+
250279
#[test]
251280
fn remove_parens_double_paren_stmt() {
252281
check_assist(

0 commit comments

Comments
 (0)