@@ -34,27 +34,24 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
3434 return None ;
3535 }
3636
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-
5237 let target = parens. syntax ( ) . text_range ( ) ;
5338 acc. add (
5439 AssistId ( "remove_parentheses" , AssistKind :: Refactor ) ,
5540 "Remove redundant parentheses" ,
5641 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+ } ,
5855 )
5956}
6057
0 commit comments