Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/rename.rs')
-rw-r--r--crates/ide-db/src/rename.rs28
1 files changed, 18 insertions, 10 deletions
diff --git a/crates/ide-db/src/rename.rs b/crates/ide-db/src/rename.rs
index fa2a46a0f7..e4d42146ca 100644
--- a/crates/ide-db/src/rename.rs
+++ b/crates/ide-db/src/rename.rs
@@ -70,15 +70,19 @@ macro_rules! _bail {
}
pub use _bail as bail;
+#[derive(Copy, Clone, Debug, PartialEq, Eq)]
+pub enum RenameDefinition {
+ Yes,
+ No,
+}
+
impl Definition {
pub fn rename(
&self,
sema: &Semantics<'_, RootDatabase>,
new_name: &str,
+ rename_definition: RenameDefinition,
) -> Result<SourceChange> {
- // We append `r#` if needed.
- let new_name = new_name.trim_start_matches("r#");
-
// self.krate() returns None if
// self is a built-in attr, built-in type or tool module.
// it is not allowed for these defs to be renamed.
@@ -103,8 +107,10 @@ impl Definition {
bail!("Cannot rename a builtin attr.")
}
Definition::SelfType(_) => bail!("Cannot rename `Self`"),
- Definition::Macro(mac) => rename_reference(sema, Definition::Macro(mac), new_name),
- def => rename_reference(sema, def, new_name),
+ Definition::Macro(mac) => {
+ rename_reference(sema, Definition::Macro(mac), new_name, rename_definition)
+ }
+ def => rename_reference(sema, def, new_name, rename_definition),
}
}
@@ -328,6 +334,7 @@ fn rename_reference(
sema: &Semantics<'_, RootDatabase>,
def: Definition,
new_name: &str,
+ rename_definition: RenameDefinition,
) -> Result<SourceChange> {
let ident_kind = IdentifierKind::classify(new_name)?;
@@ -366,11 +373,12 @@ fn rename_reference(
source_edit_from_references(references, def, new_name, file_id.edition(sema.db)),
)
}));
-
- // This needs to come after the references edits, because we change the annotation of existing edits
- // if a conflict is detected.
- let (file_id, edit) = source_edit_from_def(sema, def, new_name, &mut source_change)?;
- source_change.insert_source_edit(file_id, edit);
+ if rename_definition == RenameDefinition::Yes {
+ // This needs to come after the references edits, because we change the annotation of existing edits
+ // if a conflict is detected.
+ let (file_id, edit) = source_edit_from_def(sema, def, new_name, &mut source_change)?;
+ source_change.insert_source_edit(file_id, edit);
+ }
Ok(source_change)
}