@@ -34,27 +34,24 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
34
34
return None ;
35
35
}
36
36
37
- // we should use `find_node_at_offset` at `SourceFile` level to get expectant `Between`
38
- let token_at_offset = ctx
39
- . find_node_at_offset :: < ast:: SourceFile > ( ) ?
40
- . syntax ( )
41
- . token_at_offset ( parens. syntax ( ) . text_range ( ) . start ( ) ) ;
42
- let need_to_add_ws = match token_at_offset {
43
- syntax:: TokenAtOffset :: Between ( before, _after) => {
44
- // anyother `SyntaxKind` we missing here?
45
- let tokens = vec ! [ T ![ & ] , T ![ !] , T ![ '(' ] , T ![ '[' ] , T ![ '{' ] ] ;
46
- before. kind ( ) != SyntaxKind :: WHITESPACE && !tokens. contains ( & before. kind ( ) )
47
- }
48
- _ => false ,
49
- } ;
50
- let expr = if need_to_add_ws { format ! ( " {}" , expr) } else { expr. to_string ( ) } ;
51
-
52
37
let target = parens. syntax ( ) . text_range ( ) ;
53
38
acc. add (
54
39
AssistId ( "remove_parentheses" , AssistKind :: Refactor ) ,
55
40
"Remove redundant parentheses" ,
56
41
target,
57
- |builder| builder. replace ( parens. syntax ( ) . text_range ( ) , 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
+ } ,
58
55
)
59
56
}
60
57
0 commit comments