@@ -8,13 +8,10 @@ use ide_db::{
8
8
use stdx:: to_upper_snake_case;
9
9
use syntax:: {
10
10
ast:: { self , make, HasName } ,
11
- AstNode , WalkEvent ,
11
+ ted , AstNode , WalkEvent ,
12
12
} ;
13
13
14
- use crate :: {
15
- assist_context:: { AssistContext , Assists } ,
16
- utils:: { render_snippet, Cursor } ,
17
- } ;
14
+ use crate :: assist_context:: { AssistContext , Assists } ;
18
15
19
16
// Assist: promote_local_to_const
20
17
//
@@ -75,24 +72,28 @@ pub(crate) fn promote_local_to_const(acc: &mut Assists, ctx: &AssistContext<'_>)
75
72
AssistId ( "promote_local_to_const" , AssistKind :: Refactor ) ,
76
73
"Promote local to constant" ,
77
74
target,
78
- |builder | {
75
+ |edit | {
79
76
let name = to_upper_snake_case ( & name. to_string ( ) ) ;
80
77
let usages = Definition :: Local ( local) . usages ( & ctx. sema ) . all ( ) ;
81
78
if let Some ( usages) = usages. references . get ( & ctx. file_id ( ) ) {
82
79
for usage in usages {
83
- builder. replace ( usage. range , & name) ;
80
+ let Some ( usage) = usage. name . as_name_ref ( ) . cloned ( ) else {
81
+ continue
82
+ } ;
83
+ let usage = edit. make_mut ( usage) ;
84
+ ted:: replace ( usage. syntax ( ) , make:: name_ref ( & name) . clone_for_update ( ) . syntax ( ) ) ;
84
85
}
85
86
}
86
87
87
- let item = make:: item_const ( None , make:: name ( & name) , make:: ty ( & ty) , initializer) ;
88
- match ctx. config . snippet_cap . zip ( item. name ( ) ) {
89
- Some ( ( cap, name) ) => builder. replace_snippet (
90
- cap,
91
- target,
92
- render_snippet ( cap, item. syntax ( ) , Cursor :: Before ( name. syntax ( ) ) ) ,
93
- ) ,
94
- None => builder. replace ( target, item. to_string ( ) ) ,
88
+ let item = make:: item_const ( None , make:: name ( & name) , make:: ty ( & ty) , initializer)
89
+ . clone_for_update ( ) ;
90
+ let let_stmt = edit. make_mut ( let_stmt) ;
91
+
92
+ if let Some ( ( cap, name) ) = ctx. config . snippet_cap . zip ( item. name ( ) ) {
93
+ edit. add_tabstop_before ( cap, name) ;
95
94
}
95
+
96
+ ted:: replace ( let_stmt. syntax ( ) , item. syntax ( ) ) ;
96
97
} ,
97
98
)
98
99
}
0 commit comments