mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-08-30 15:17:31 +00:00
Implement workspace/willRenameFiles for single-level file moves
Renames modules during file rename if they're in the same directory.
This commit is contained in:
parent
27ccde9ce9
commit
4f989cfa08
5 changed files with 92 additions and 6 deletions
|
@ -535,6 +535,14 @@ impl Analysis {
|
|||
self.with_db(|db| references::rename::prepare_rename(db, position))
|
||||
}
|
||||
|
||||
pub fn will_rename_file(
|
||||
&self,
|
||||
file_id: FileId,
|
||||
new_name_stem: &str,
|
||||
) -> Cancelable<Option<SourceChange>> {
|
||||
self.with_db(|db| references::rename::will_rename_file(db, file_id, new_name_stem))
|
||||
}
|
||||
|
||||
pub fn structural_search_replace(
|
||||
&self,
|
||||
query: &str,
|
||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
|||
};
|
||||
|
||||
use hir::{Module, ModuleDef, ModuleSource, Semantics};
|
||||
use ide_db::base_db::{AnchoredPathBuf, FileRange, SourceDatabaseExt};
|
||||
use ide_db::base_db::{AnchoredPathBuf, FileId, FileRange, SourceDatabaseExt};
|
||||
use ide_db::{
|
||||
defs::{Definition, NameClass, NameRefClass},
|
||||
RootDatabase,
|
||||
|
@ -110,6 +110,23 @@ pub(crate) fn rename_with_semantics(
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) fn will_rename_file(
|
||||
db: &RootDatabase,
|
||||
file_id: FileId,
|
||||
new_name_stem: &str,
|
||||
) -> Option<SourceChange> {
|
||||
let sema = Semantics::new(db);
|
||||
let module = sema.to_module_def(file_id)?;
|
||||
|
||||
let decl = module.declaration_source(db)?;
|
||||
let range = decl.value.name()?.syntax().text_range();
|
||||
|
||||
let position = FilePosition { file_id: decl.file_id.original_file(db), offset: range.start() };
|
||||
let mut change = rename_mod(&sema, position, module, new_name_stem).ok()?.info;
|
||||
change.file_system_edits.clear();
|
||||
Some(change)
|
||||
}
|
||||
|
||||
fn find_module_at_offset(
|
||||
sema: &Semantics<RootDatabase>,
|
||||
position: FilePosition,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue