@@ -80,10 +80,8 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
8080 _ => return None ,
8181 } ;
8282
83- let make = SyntaxFactory :: with_mappings ( ) ;
84-
8583 let ( mut editor, demorganed) = SyntaxEditor :: with_ast_node ( & bin_expr) ;
86- editor. replace ( demorganed. op_token ( ) ?, make. token ( inv_token) ) ;
84+ editor. replace ( demorganed. op_token ( ) ?, editor . make ( ) . token ( inv_token) ) ;
8785
8886 let mut exprs = VecDeque :: from ( [
8987 ( bin_expr. lhs ( ) ?, demorganed. lhs ( ) ?, prec) ,
@@ -94,29 +92,28 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
9492 if let BinExpr ( bin_expr) = & expr {
9593 if let BinExpr ( cbin_expr) = & demorganed {
9694 if op == bin_expr. op_kind ( ) ? {
97- editor. replace ( cbin_expr. op_token ( ) ?, make. token ( inv_token) ) ;
95+ editor. replace ( cbin_expr. op_token ( ) ?, editor . make ( ) . token ( inv_token) ) ;
9896 exprs. push_back ( ( bin_expr. lhs ( ) ?, cbin_expr. lhs ( ) ?, prec) ) ;
9997 exprs. push_back ( ( bin_expr. rhs ( ) ?, cbin_expr. rhs ( ) ?, prec) ) ;
10098 } else {
101- let mut inv = invert_boolean_expression ( & make, expr) ;
99+ let mut inv = invert_boolean_expression ( editor . make ( ) , expr) ;
102100 if precedence ( & inv) . needs_parentheses_in ( prec) {
103- inv = make. expr_paren ( inv) . into ( ) ;
101+ inv = editor . make ( ) . expr_paren ( inv) . into ( ) ;
104102 }
105103 editor. replace ( demorganed. syntax ( ) , inv. syntax ( ) ) ;
106104 }
107105 } else {
108106 return None ;
109107 }
110108 } else {
111- let mut inv = invert_boolean_expression ( & make, demorganed. clone ( ) ) ;
109+ let mut inv = invert_boolean_expression ( editor . make ( ) , demorganed. clone ( ) ) ;
112110 if precedence ( & inv) . needs_parentheses_in ( prec) {
113- inv = make. expr_paren ( inv) . into ( ) ;
111+ inv = editor . make ( ) . expr_paren ( inv) . into ( ) ;
114112 }
115113 editor. replace ( demorganed. syntax ( ) , inv. syntax ( ) ) ;
116114 }
117115 }
118116
119- editor. add_mappings ( make. finish_with_mappings ( ) ) ;
120117 let edit = editor. finish ( ) ;
121118 let demorganed = ast:: Expr :: cast ( edit. new_root ( ) . clone ( ) ) ?;
122119
@@ -126,7 +123,8 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
126123 "Apply De Morgan's law" ,
127124 op_range,
128125 |builder| {
129- let make = SyntaxFactory :: with_mappings ( ) ;
126+ let mut editor = builder. make_editor ( bin_expr. syntax ( ) ) ;
127+
130128 let ( target_node, result_expr) = if let Some ( neg_expr) = bin_expr
131129 . syntax ( )
132130 . parent ( )
@@ -141,24 +139,22 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
141139 bin_expr. syntax ( ) . parent ( ) . and_then ( ast:: ParenExpr :: cast)
142140 {
143141 cov_mark:: hit!( demorgan_double_parens) ;
144- ( paren_expr. syntax ( ) . clone ( ) , add_bang_paren ( & make, demorganed) )
142+ ( paren_expr. syntax ( ) . clone ( ) , add_bang_paren ( editor . make ( ) , demorganed) )
145143 } else {
146- ( bin_expr. syntax ( ) . clone ( ) , add_bang_paren ( & make, demorganed) )
144+ ( bin_expr. syntax ( ) . clone ( ) , add_bang_paren ( editor . make ( ) , demorganed) )
147145 } ;
148146
149147 let final_expr = if target_node
150148 . parent ( )
151149 . is_some_and ( |p| result_expr. needs_parens_in_place_of ( & p, & target_node) )
152150 {
153151 cov_mark:: hit!( demorgan_keep_parens_for_op_precedence2) ;
154- make. expr_paren ( result_expr) . into ( )
152+ editor . make ( ) . expr_paren ( result_expr) . into ( )
155153 } else {
156154 result_expr
157155 } ;
158156
159- let mut editor = builder. make_editor ( & target_node) ;
160157 editor. replace ( & target_node, final_expr. syntax ( ) ) ;
161- editor. add_mappings ( make. finish_with_mappings ( ) ) ;
162158 builder. add_file_edits ( ctx. vfs_file_id ( ) , editor) ;
163159 } ,
164160 )
@@ -206,18 +202,17 @@ pub(crate) fn apply_demorgan_iterator(acc: &mut Assists, ctx: &AssistContext<'_>
206202 label,
207203 op_range,
208204 |builder| {
209- let make = SyntaxFactory :: with_mappings ( ) ;
210205 let mut editor = builder. make_editor ( method_call. syntax ( ) ) ;
211206 // replace the method name
212207 let new_name = match name. text ( ) . as_str ( ) {
213- "all" => make. name_ref ( "any" ) ,
214- "any" => make. name_ref ( "all" ) ,
208+ "all" => editor . make ( ) . name_ref ( "any" ) ,
209+ "any" => editor . make ( ) . name_ref ( "all" ) ,
215210 _ => unreachable ! ( ) ,
216211 } ;
217212 editor. replace ( name. syntax ( ) , new_name. syntax ( ) ) ;
218213
219214 // negate all tail expressions in the closure body
220- let tail_cb = & mut |e : & _ | tail_cb_impl ( & mut editor, & make , e) ;
215+ let tail_cb = & mut |e : & _ | tail_cb_impl ( & mut editor, e) ;
221216 walk_expr ( & closure_body, & mut |expr| {
222217 if let ast:: Expr :: ReturnExpr ( ret_expr) = expr
223218 && let Some ( ret_expr_arg) = & ret_expr. expr ( )
@@ -238,10 +233,11 @@ pub(crate) fn apply_demorgan_iterator(acc: &mut Assists, ctx: &AssistContext<'_>
238233 prefix_expr. op_token ( ) . expect ( "prefix expression always has an operator" ) ,
239234 ) ;
240235 } else {
241- editor. insert ( Position :: before ( method_call. syntax ( ) ) , make. token ( SyntaxKind :: BANG ) ) ;
236+ editor. insert (
237+ Position :: before ( method_call. syntax ( ) ) ,
238+ editor. make ( ) . token ( SyntaxKind :: BANG ) ,
239+ ) ;
242240 }
243-
244- editor. add_mappings ( make. finish_with_mappings ( ) ) ;
245241 builder. add_file_edits ( ctx. vfs_file_id ( ) , editor) ;
246242 } ,
247243 )
@@ -269,18 +265,18 @@ fn validate_method_call_expr(
269265 it_type. impls_trait ( sema. db , iter_trait, & [ ] ) . then_some ( ( name_ref, arg_expr) )
270266}
271267
272- fn tail_cb_impl ( editor : & mut SyntaxEditor , make : & SyntaxFactory , e : & ast:: Expr ) {
268+ fn tail_cb_impl ( editor : & mut SyntaxEditor , e : & ast:: Expr ) {
273269 match e {
274270 ast:: Expr :: BreakExpr ( break_expr) => {
275271 if let Some ( break_expr_arg) = break_expr. expr ( ) {
276- for_each_tail_expr ( & break_expr_arg, & mut |e| tail_cb_impl ( editor, make , e) )
272+ for_each_tail_expr ( & break_expr_arg, & mut |e| tail_cb_impl ( editor, e) )
277273 }
278274 }
279275 ast:: Expr :: ReturnExpr ( _) => {
280276 // all return expressions have already been handled by the walk loop
281277 }
282278 e => {
283- let inverted_body = invert_boolean_expression ( make, e. clone ( ) ) ;
279+ let inverted_body = invert_boolean_expression ( editor . make ( ) , e. clone ( ) ) ;
284280 editor. replace ( e. syntax ( ) , inverted_body. syntax ( ) ) ;
285281 }
286282 }
0 commit comments