1
- use syntax:: { ast, AstNode } ;
1
+ use syntax:: { ast, AstNode , SyntaxKind , T } ;
2
2
3
3
use crate :: { AssistContext , AssistId , AssistKind , Assists } ;
4
4
@@ -39,7 +39,19 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
39
39
AssistId ( "remove_parentheses" , AssistKind :: Refactor ) ,
40
40
"Remove redundant parentheses" ,
41
41
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
+ } ,
43
55
)
44
56
}
45
57
@@ -49,6 +61,15 @@ mod tests {
49
61
50
62
use super :: * ;
51
63
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
+
52
73
#[ test]
53
74
fn remove_parens_simple ( ) {
54
75
check_assist ( remove_parentheses, r#"fn f() { $0(2) + 2; }"# , r#"fn f() { 2 + 2; }"# ) ;
@@ -94,8 +115,8 @@ mod tests {
94
115
check_assist ( remove_parentheses, r#"fn f() { f(($02 + 2)); }"# , r#"fn f() { f(2 + 2); }"# ) ;
95
116
check_assist (
96
117
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; }"# ,
99
120
) ;
100
121
}
101
122
@@ -164,8 +185,8 @@ mod tests {
164
185
fn remove_parens_weird_places ( ) {
165
186
check_assist (
166
187
remove_parentheses,
167
- r#"fn f() { match () { _=>$0(()) } }"# ,
168
- r#"fn f() { match () { _=> () } }"# ,
188
+ r#"fn f() { match () { _ =>$0(()) } }"# ,
189
+ r#"fn f() { match () { _ => () } }"# ,
169
190
) ;
170
191
171
192
check_assist (
0 commit comments