@@ -84,6 +84,7 @@ pub(crate) fn rename(
84
84
db : & RootDatabase ,
85
85
position : FilePosition ,
86
86
new_name : & str ,
87
+ rename_external : bool ,
87
88
) -> RenameResult < SourceChange > {
88
89
let sema = Semantics :: new ( db) ;
89
90
let source_file = sema. parse ( position. file_id ) ;
@@ -103,7 +104,7 @@ pub(crate) fn rename(
103
104
return rename_to_self ( & sema, local) ;
104
105
}
105
106
}
106
- def. rename ( & sema, new_name)
107
+ def. rename ( & sema, new_name, rename_external )
107
108
} )
108
109
. collect ( ) ;
109
110
@@ -122,9 +123,9 @@ pub(crate) fn will_rename_file(
122
123
let module = sema. to_module_def ( file_id) ?;
123
124
let def = Definition :: Module ( module) ;
124
125
let mut change = if is_raw_identifier ( new_name_stem) {
125
- def. rename ( & sema, & SmolStr :: from_iter ( [ "r#" , new_name_stem] ) ) . ok ( ) ?
126
+ def. rename ( & sema, & SmolStr :: from_iter ( [ "r#" , new_name_stem] ) , true ) . ok ( ) ?
126
127
} else {
127
- def. rename ( & sema, new_name_stem) . ok ( ) ?
128
+ def. rename ( & sema, new_name_stem, true ) . ok ( ) ?
128
129
} ;
129
130
change. file_system_edits . clear ( ) ;
130
131
Some ( change)
@@ -375,8 +376,17 @@ mod tests {
375
376
376
377
use super :: { RangeInfo , RenameError } ;
377
378
378
- #[ track_caller]
379
379
fn check ( new_name : & str , ra_fixture_before : & str , ra_fixture_after : & str ) {
380
+ check_with_rename_config ( new_name, ra_fixture_before, ra_fixture_after, true ) ;
381
+ }
382
+
383
+ #[ track_caller]
384
+ fn check_with_rename_config (
385
+ new_name : & str ,
386
+ ra_fixture_before : & str ,
387
+ ra_fixture_after : & str ,
388
+ rename_external : bool ,
389
+ ) {
380
390
let ra_fixture_after = & trim_indent ( ra_fixture_after) ;
381
391
let ( analysis, position) = fixture:: position ( ra_fixture_before) ;
382
392
if !ra_fixture_after. starts_with ( "error: " ) {
@@ -385,7 +395,7 @@ mod tests {
385
395
}
386
396
}
387
397
let rename_result = analysis
388
- . rename ( position, new_name)
398
+ . rename ( position, new_name, rename_external )
389
399
. unwrap_or_else ( |err| panic ! ( "Rename to '{new_name}' was cancelled: {err}" ) ) ;
390
400
match rename_result {
391
401
Ok ( source_change) => {
@@ -417,8 +427,10 @@ mod tests {
417
427
418
428
fn check_expect ( new_name : & str , ra_fixture : & str , expect : Expect ) {
419
429
let ( analysis, position) = fixture:: position ( ra_fixture) ;
420
- let source_change =
421
- analysis. rename ( position, new_name) . unwrap ( ) . expect ( "Expect returned a RenameError" ) ;
430
+ let source_change = analysis
431
+ . rename ( position, new_name, true )
432
+ . unwrap ( )
433
+ . expect ( "Expect returned a RenameError" ) ;
422
434
expect. assert_eq ( & filter_expect ( source_change) )
423
435
}
424
436
@@ -2617,6 +2629,18 @@ use qux as frob;
2617
2629
2618
2630
#[ test]
2619
2631
fn disallow_renaming_for_non_local_definition ( ) {
2632
+ check_with_rename_config (
2633
+ "Baz" ,
2634
+ r#"
2635
+ //- /lib.rs crate:lib new_source_root:library
2636
+ pub struct S;
2637
+ //- /main.rs crate:main deps:lib new_source_root:local
2638
+ use lib::S$0;
2639
+ "# ,
2640
+ "error: Cannot rename a non-local definition. Set `renameExternalItems` to `true` to allow renaming for this item." ,
2641
+ false ,
2642
+ ) ;
2643
+
2620
2644
check (
2621
2645
"Baz" ,
2622
2646
r#"
@@ -2625,13 +2649,13 @@ pub struct S;
2625
2649
//- /main.rs crate:main deps:lib new_source_root:local
2626
2650
use lib::S$0;
2627
2651
"# ,
2628
- "error: Cannot rename a non-local definition. " ,
2652
+ "use lib::Baz; " ,
2629
2653
) ;
2630
2654
}
2631
2655
2632
2656
#[ test]
2633
2657
fn disallow_renaming_for_builtin_macros ( ) {
2634
- check (
2658
+ check_with_rename_config (
2635
2659
"Baz" ,
2636
2660
r#"
2637
2661
//- minicore: derive, hash
@@ -2640,8 +2664,9 @@ use core::hash::Hash;
2640
2664
#[derive(H$0ash)]
2641
2665
struct A;
2642
2666
"# ,
2643
- "error: Cannot rename a non-local definition." ,
2644
- )
2667
+ "error: Cannot rename a non-local definition. Set `renameExternalItems` to `true` to allow renaming for this item." ,
2668
+ false ,
2669
+ ) ;
2645
2670
}
2646
2671
2647
2672
#[ test]
0 commit comments