@@ -8,13 +8,10 @@ use ide_db::{
88use stdx:: to_upper_snake_case;
99use syntax:: {
1010 ast:: { self , make, HasName } ,
11- AstNode , WalkEvent ,
11+ ted , AstNode , WalkEvent ,
1212} ;
1313
14- use crate :: {
15- assist_context:: { AssistContext , Assists } ,
16- utils:: { render_snippet, Cursor } ,
17- } ;
14+ use crate :: assist_context:: { AssistContext , Assists } ;
1815
1916// Assist: promote_local_to_const
2017//
@@ -75,24 +72,28 @@ pub(crate) fn promote_local_to_const(acc: &mut Assists, ctx: &AssistContext<'_>)
7572 AssistId ( "promote_local_to_const" , AssistKind :: Refactor ) ,
7673 "Promote local to constant" ,
7774 target,
78- |builder | {
75+ |edit | {
7976 let name = to_upper_snake_case ( & name. to_string ( ) ) ;
8077 let usages = Definition :: Local ( local) . usages ( & ctx. sema ) . all ( ) ;
8178 if let Some ( usages) = usages. references . get ( & ctx. file_id ( ) ) {
8279 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 ( ) ) ;
8485 }
8586 }
8687
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) ;
9594 }
95+
96+ ted:: replace ( let_stmt. syntax ( ) , item. syntax ( ) ) ;
9697 } ,
9798 )
9899}
0 commit comments