@@ -70,15 +70,19 @@ macro_rules! _bail {
70
70
}
71
71
pub use _bail as bail;
72
72
73
+ #[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
74
+ pub enum RenameDefinition {
75
+ Yes ,
76
+ No ,
77
+ }
78
+
73
79
impl Definition {
74
80
pub fn rename (
75
81
& self ,
76
82
sema : & Semantics < ' _ , RootDatabase > ,
77
83
new_name : & str ,
84
+ rename_definition : RenameDefinition ,
78
85
) -> Result < SourceChange > {
79
- // We append `r#` if needed.
80
- let new_name = new_name. trim_start_matches ( "r#" ) ;
81
-
82
86
// self.krate() returns None if
83
87
// self is a built-in attr, built-in type or tool module.
84
88
// it is not allowed for these defs to be renamed.
@@ -103,8 +107,10 @@ impl Definition {
103
107
bail ! ( "Cannot rename a builtin attr." )
104
108
}
105
109
Definition :: SelfType ( _) => bail ! ( "Cannot rename `Self`" ) ,
106
- Definition :: Macro ( mac) => rename_reference ( sema, Definition :: Macro ( mac) , new_name) ,
107
- def => rename_reference ( sema, def, new_name) ,
110
+ Definition :: Macro ( mac) => {
111
+ rename_reference ( sema, Definition :: Macro ( mac) , new_name, rename_definition)
112
+ }
113
+ def => rename_reference ( sema, def, new_name, rename_definition) ,
108
114
}
109
115
}
110
116
@@ -328,6 +334,7 @@ fn rename_reference(
328
334
sema : & Semantics < ' _ , RootDatabase > ,
329
335
def : Definition ,
330
336
new_name : & str ,
337
+ rename_definition : RenameDefinition ,
331
338
) -> Result < SourceChange > {
332
339
let ident_kind = IdentifierKind :: classify ( new_name) ?;
333
340
@@ -366,11 +373,12 @@ fn rename_reference(
366
373
source_edit_from_references ( references, def, new_name, file_id. edition ( sema. db ) ) ,
367
374
)
368
375
} ) ) ;
369
-
370
- // This needs to come after the references edits, because we change the annotation of existing edits
371
- // if a conflict is detected.
372
- let ( file_id, edit) = source_edit_from_def ( sema, def, new_name, & mut source_change) ?;
373
- source_change. insert_source_edit ( file_id, edit) ;
376
+ if rename_definition == RenameDefinition :: Yes {
377
+ // This needs to come after the references edits, because we change the annotation of existing edits
378
+ // if a conflict is detected.
379
+ let ( file_id, edit) = source_edit_from_def ( sema, def, new_name, & mut source_change) ?;
380
+ source_change. insert_source_edit ( file_id, edit) ;
381
+ }
374
382
Ok ( source_change)
375
383
}
376
384
0 commit comments