1- use syntax:: { ast, AstNode } ;
1+ use syntax:: { ast, AstNode , SyntaxKind , T } ;
22
33use crate :: { AssistContext , AssistId , AssistKind , Assists } ;
44
@@ -39,7 +39,19 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
3939 AssistId ( "remove_parentheses" , AssistKind :: Refactor ) ,
4040 "Remove redundant parentheses" ,
4141 target,
42- |builder| builder. replace_ast ( parens. into ( ) , expr) ,
42+ |builder| {
43+ let prev_token = parens. syntax ( ) . first_token ( ) . and_then ( |it| it. prev_token ( ) ) ;
44+ let need_to_add_ws = match prev_token {
45+ Some ( it) => {
46+ let tokens = vec ! [ T ![ & ] , T ![ !] , T ![ '(' ] , T ![ '[' ] , T ![ '{' ] ] ;
47+ it. kind ( ) != SyntaxKind :: WHITESPACE && !tokens. contains ( & it. kind ( ) )
48+ }
49+ None => false ,
50+ } ;
51+ let expr = if need_to_add_ws { format ! ( " {}" , expr) } else { expr. to_string ( ) } ;
52+
53+ builder. replace ( parens. syntax ( ) . text_range ( ) , expr)
54+ } ,
4355 )
4456}
4557
@@ -49,6 +61,15 @@ mod tests {
4961
5062 use super :: * ;
5163
64+ #[ test]
65+ fn remove_parens_space ( ) {
66+ check_assist (
67+ remove_parentheses,
68+ r#"fn f() { match$0(true) {} }"# ,
69+ r#"fn f() { match true {} }"# ,
70+ ) ;
71+ }
72+
5273 #[ test]
5374 fn remove_parens_simple ( ) {
5475 check_assist ( remove_parentheses, r#"fn f() { $0(2) + 2; }"# , r#"fn f() { 2 + 2; }"# ) ;
@@ -94,8 +115,8 @@ mod tests {
94115 check_assist ( remove_parentheses, r#"fn f() { f(($02 + 2)); }"# , r#"fn f() { f(2 + 2); }"# ) ;
95116 check_assist (
96117 remove_parentheses,
97- r#"fn f() { (1<2)&&$0(3>4); }"# ,
98- r#"fn f() { (1<2)&& 3>4; }"# ,
118+ r#"fn f() { (1<2) &&$0(3>4); }"# ,
119+ r#"fn f() { (1<2) && 3>4; }"# ,
99120 ) ;
100121 }
101122
@@ -164,8 +185,8 @@ mod tests {
164185 fn remove_parens_weird_places ( ) {
165186 check_assist (
166187 remove_parentheses,
167- r#"fn f() { match () { _=>$0(()) } }"# ,
168- r#"fn f() { match () { _=> () } }"# ,
188+ r#"fn f() { match () { _ =>$0(()) } }"# ,
189+ r#"fn f() { match () { _ => () } }"# ,
169190 ) ;
170191
171192 check_assist (
0 commit comments