@@ -4,7 +4,7 @@ use itertools::Itertools;
4
4
5
5
use syntax:: {
6
6
ast:: { self , HasName } ,
7
- ted , AstNode , TextRange ,
7
+ AstNode , SyntaxNode ,
8
8
} ;
9
9
10
10
use crate :: { utils:: get_methods, AssistContext , AssistId , AssistKind , Assists } ;
@@ -114,7 +114,7 @@ trait AddRewrite {
114
114
label : & str ,
115
115
old : Vec < T > ,
116
116
new : Vec < T > ,
117
- target : TextRange ,
117
+ target : & SyntaxNode ,
118
118
) -> Option < ( ) > ;
119
119
}
120
120
@@ -124,15 +124,23 @@ impl AddRewrite for Assists {
124
124
label : & str ,
125
125
old : Vec < T > ,
126
126
new : Vec < T > ,
127
- target : TextRange ,
127
+ target : & SyntaxNode ,
128
128
) -> Option < ( ) > {
129
- self . add ( AssistId ( "sort_items" , AssistKind :: RefactorRewrite ) , label, target, |builder| {
130
- let mutable: Vec < T > = old. into_iter ( ) . map ( |it| builder. make_mut ( it) ) . collect ( ) ;
131
- mutable
132
- . into_iter ( )
133
- . zip ( new)
134
- . for_each ( |( old, new) | ted:: replace ( old. syntax ( ) , new. clone_for_update ( ) . syntax ( ) ) ) ;
135
- } )
129
+ self . add (
130
+ AssistId ( "sort_items" , AssistKind :: RefactorRewrite ) ,
131
+ label,
132
+ target. text_range ( ) ,
133
+ |builder| {
134
+ let mut editor = builder. make_editor ( target) ;
135
+
136
+ old. into_iter ( ) . zip ( new) . for_each ( |( old, new) | {
137
+ // FIXME: remove `clone_for_update` when `SyntaxEditor` handles it for us
138
+ editor. replace ( old. syntax ( ) , new. clone_for_update ( ) . syntax ( ) )
139
+ } ) ;
140
+
141
+ builder. add_file_edits ( builder. file_id , editor)
142
+ } ,
143
+ )
136
144
}
137
145
}
138
146
@@ -167,7 +175,7 @@ fn add_sort_methods_assist(
167
175
return None ;
168
176
}
169
177
170
- acc. add_rewrite ( "Sort methods alphabetically" , methods, sorted, item_list. syntax ( ) . text_range ( ) )
178
+ acc. add_rewrite ( "Sort methods alphabetically" , methods, sorted, item_list. syntax ( ) )
171
179
}
172
180
173
181
fn add_sort_fields_assist (
@@ -182,12 +190,7 @@ fn add_sort_fields_assist(
182
190
return None ;
183
191
}
184
192
185
- acc. add_rewrite (
186
- "Sort fields alphabetically" ,
187
- fields,
188
- sorted,
189
- record_field_list. syntax ( ) . text_range ( ) ,
190
- )
193
+ acc. add_rewrite ( "Sort fields alphabetically" , fields, sorted, record_field_list. syntax ( ) )
191
194
}
192
195
193
196
fn add_sort_variants_assist ( acc : & mut Assists , variant_list : ast:: VariantList ) -> Option < ( ) > {
@@ -199,12 +202,7 @@ fn add_sort_variants_assist(acc: &mut Assists, variant_list: ast::VariantList) -
199
202
return None ;
200
203
}
201
204
202
- acc. add_rewrite (
203
- "Sort variants alphabetically" ,
204
- variants,
205
- sorted,
206
- variant_list. syntax ( ) . text_range ( ) ,
207
- )
205
+ acc. add_rewrite ( "Sort variants alphabetically" , variants, sorted, variant_list. syntax ( ) )
208
206
}
209
207
210
208
fn sort_by_name < T : HasName + Clone > ( initial : & [ T ] ) -> Vec < T > {
0 commit comments