@@ -3,8 +3,7 @@ use ide_db::{assists::AssistId, defs::Definition};
33use stdx:: to_upper_snake_case;
44use syntax:: {
55 AstNode ,
6- ast:: { self , HasName , make} ,
7- ted,
6+ ast:: { self , HasName , syntax_factory:: SyntaxFactory } ,
87} ;
98
109use crate :: {
@@ -69,15 +68,18 @@ pub(crate) fn promote_local_to_const(acc: &mut Assists, ctx: &AssistContext<'_>)
6968 "Promote local to constant" ,
7069 let_stmt. syntax ( ) . text_range ( ) ,
7170 |edit| {
71+ let make = SyntaxFactory :: with_mappings ( ) ;
72+ let mut editor = edit. make_editor ( let_stmt. syntax ( ) ) ;
7273 let name = to_upper_snake_case ( & name. to_string ( ) ) ;
7374 let usages = Definition :: Local ( local) . usages ( & ctx. sema ) . all ( ) ;
7475 if let Some ( usages) = usages. references . get ( & ctx. file_id ( ) ) {
75- let name_ref = make:: name_ref ( & name) ;
76+ let name_ref = make. name_ref ( & name) ;
7677
7778 for usage in usages {
7879 let Some ( usage_name) = usage. name . as_name_ref ( ) . cloned ( ) else { continue } ;
7980 if let Some ( record_field) = ast:: RecordExprField :: for_name_ref ( & usage_name) {
80- let name_expr = make:: expr_path ( make:: path_from_text ( & name) ) ;
81+ let path = make. ident_path ( & name) ;
82+ let name_expr = make. expr_path ( path) ;
8183 utils:: replace_record_field_expr ( ctx, edit, record_field, name_expr) ;
8284 } else {
8385 let usage_range = usage. range ;
@@ -86,15 +88,17 @@ pub(crate) fn promote_local_to_const(acc: &mut Assists, ctx: &AssistContext<'_>)
8688 }
8789 }
8890
89- let item = make:: item_const ( None , make:: name ( & name) , make:: ty ( & ty) , initializer)
90- . clone_for_update ( ) ;
91- let let_stmt = edit. make_mut ( let_stmt) ;
91+ let item = make. item_const ( None , make. name ( & name) , make. ty ( & ty) , initializer) ;
9292
9393 if let Some ( ( cap, name) ) = ctx. config . snippet_cap . zip ( item. name ( ) ) {
94- edit. add_tabstop_before ( cap, name) ;
94+ let tabstop = edit. make_tabstop_before ( cap) ;
95+ editor. add_annotation ( name. syntax ( ) . clone ( ) , tabstop) ;
9596 }
9697
97- ted:: replace ( let_stmt. syntax ( ) , item. syntax ( ) ) ;
98+ editor. replace ( let_stmt. syntax ( ) , item. syntax ( ) ) ;
99+
100+ editor. add_mappings ( make. finish_with_mappings ( ) ) ;
101+ edit. add_file_edits ( ctx. vfs_file_id ( ) , editor) ;
98102 } ,
99103 )
100104}
0 commit comments