@@ -207,7 +207,7 @@ fn rename_mod(
207
207
}
208
208
// The anchor is on the same level as target dir
209
209
( false , true , Some ( mod_name) ) => {
210
- Some ( ( mod_name. unescaped ( ) . to_string ( ) , new_name. to_string ( ) ) )
210
+ Some ( ( mod_name. unescaped ( ) . to_string ( ) , new_name. to_owned ( ) ) )
211
211
}
212
212
_ => None ,
213
213
} ;
@@ -232,7 +232,7 @@ fn rename_mod(
232
232
{
233
233
source_change. insert_source_edit (
234
234
file_id,
235
- TextEdit :: replace ( file_range. range , new_name. to_string ( ) ) ,
235
+ TextEdit :: replace ( file_range. range , new_name. to_owned ( ) ) ,
236
236
)
237
237
} ;
238
238
}
@@ -442,7 +442,7 @@ fn source_edit_from_name_ref(
442
442
let s = field_name. syntax ( ) . text_range ( ) . start ( ) ;
443
443
let e = pat. syntax ( ) . text_range ( ) . start ( ) ;
444
444
edit. delete ( TextRange :: new ( s, e) ) ;
445
- edit. replace ( name. syntax ( ) . text_range ( ) , new_name. to_string ( ) ) ;
445
+ edit. replace ( name. syntax ( ) . text_range ( ) , new_name. to_owned ( ) ) ;
446
446
return true ;
447
447
}
448
448
}
@@ -462,7 +462,19 @@ fn source_edit_from_def(
462
462
if let Definition :: Local ( local) = def {
463
463
let mut file_id = None ;
464
464
for source in local. sources ( sema. db ) {
465
- let source = source. source ;
465
+ let source = match source. source . clone ( ) . original_ast_node ( sema. db ) {
466
+ Some ( source) => source,
467
+ None => match source. source . syntax ( ) . original_file_range_opt ( sema. db ) {
468
+ Some ( FileRange { file_id : file_id2, range } ) => {
469
+ file_id = Some ( file_id2) ;
470
+ edit. replace ( range, new_name. to_owned ( ) ) ;
471
+ continue ;
472
+ }
473
+ None => {
474
+ bail ! ( "Can't rename local that is defined in a macro declaration" )
475
+ }
476
+ } ,
477
+ } ;
466
478
file_id = source. file_id . file_id ( ) ;
467
479
if let Either :: Left ( pat) = source. value {
468
480
let name_range = pat. name ( ) . unwrap ( ) . syntax ( ) . text_range ( ) ;
@@ -485,7 +497,7 @@ fn source_edit_from_def(
485
497
// Foo { field: ref mut local @ local 2} -> Foo { field: ref mut new_name @ local2 }
486
498
// Foo { field: ref mut local } -> Foo { field: ref mut new_name }
487
499
// ^^^^^ replace this with `new_name`
488
- edit. replace ( name_range, new_name. to_string ( ) ) ;
500
+ edit. replace ( name_range, new_name. to_owned ( ) ) ;
489
501
}
490
502
} else {
491
503
// Foo { ref mut field } -> Foo { field: ref mut new_name }
@@ -495,10 +507,10 @@ fn source_edit_from_def(
495
507
pat. syntax ( ) . text_range ( ) . start ( ) ,
496
508
format ! ( "{}: " , pat_field. field_name( ) . unwrap( ) ) ,
497
509
) ;
498
- edit. replace ( name_range, new_name. to_string ( ) ) ;
510
+ edit. replace ( name_range, new_name. to_owned ( ) ) ;
499
511
}
500
512
} else {
501
- edit. replace ( name_range, new_name. to_string ( ) ) ;
513
+ edit. replace ( name_range, new_name. to_owned ( ) ) ;
502
514
}
503
515
}
504
516
}
0 commit comments