@@ -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,24 @@ 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
+ let node = old. first ( ) . unwrap ( ) . syntax ( ) . parent ( ) . unwrap ( ) ;
130
+ self . add (
131
+ AssistId ( "sort_items" , AssistKind :: RefactorRewrite ) ,
132
+ label,
133
+ target. text_range ( ) ,
134
+ |builder| {
135
+ let mut editor = builder. make_editor ( & node) ;
136
+
137
+ old. into_iter ( ) . zip ( new) . for_each ( |( old, new) | {
138
+ // FIXME: remove `clone_for_update` when `SyntaxEditor` handles it for us
139
+ editor. replace ( old. syntax ( ) , new. clone_for_update ( ) . syntax ( ) )
140
+ } ) ;
141
+
142
+ builder. add_file_edits ( builder. file_id , editor)
143
+ } ,
144
+ )
136
145
}
137
146
}
138
147
@@ -167,7 +176,7 @@ fn add_sort_methods_assist(
167
176
return None ;
168
177
}
169
178
170
- acc. add_rewrite ( "Sort methods alphabetically" , methods, sorted, item_list. syntax ( ) . text_range ( ) )
179
+ acc. add_rewrite ( "Sort methods alphabetically" , methods, sorted, item_list. syntax ( ) . clone ( ) )
171
180
}
172
181
173
182
fn add_sort_fields_assist (
@@ -186,7 +195,7 @@ fn add_sort_fields_assist(
186
195
"Sort fields alphabetically" ,
187
196
fields,
188
197
sorted,
189
- record_field_list. syntax ( ) . text_range ( ) ,
198
+ record_field_list. syntax ( ) . clone ( ) ,
190
199
)
191
200
}
192
201
@@ -199,12 +208,7 @@ fn add_sort_variants_assist(acc: &mut Assists, variant_list: ast::VariantList) -
199
208
return None ;
200
209
}
201
210
202
- acc. add_rewrite (
203
- "Sort variants alphabetically" ,
204
- variants,
205
- sorted,
206
- variant_list. syntax ( ) . text_range ( ) ,
207
- )
211
+ acc. add_rewrite ( "Sort variants alphabetically" , variants, sorted, variant_list. syntax ( ) . clone ( ) )
208
212
}
209
213
210
214
fn sort_by_name < T : HasName + Clone > ( initial : & [ T ] ) -> Vec < T > {
0 commit comments