diff options
Diffstat (limited to 'support/texlab/crates/rename/src/lib.rs')
-rw-r--r-- | support/texlab/crates/rename/src/lib.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/support/texlab/crates/rename/src/lib.rs b/support/texlab/crates/rename/src/lib.rs new file mode 100644 index 0000000000..d9b28c3586 --- /dev/null +++ b/support/texlab/crates/rename/src/lib.rs @@ -0,0 +1,44 @@ +mod command; +mod entry; +mod label; + +use base_db::{Document, FeatureParams}; +use rowan::{TextRange, TextSize}; +use rustc_hash::FxHashMap; + +#[derive(Debug)] +pub struct RenameParams<'db> { + pub inner: FeatureParams<'db>, + pub offset: TextSize, +} + +#[derive(Debug, Default)] +pub struct RenameResult<'db> { + pub changes: FxHashMap<&'db Document, Vec<TextRange>>, +} + +struct RenameBuilder<'db> { + params: &'db RenameParams<'db>, + result: RenameResult<'db>, +} + +pub fn prepare_rename(params: &RenameParams) -> Option<TextRange> { + command::prepare_rename(¶ms) + .or_else(|| entry::prepare_rename(¶ms)) + .or_else(|| label::prepare_rename(¶ms)) + .map(|span| span.range) +} + +pub fn rename<'db>(params: &'db RenameParams<'db>) -> RenameResult<'db> { + let result = RenameResult::default(); + let mut builder = RenameBuilder { params, result }; + + command::rename(&mut builder) + .or_else(|| entry::rename(&mut builder)) + .or_else(|| label::rename(&mut builder)); + + builder.result +} + +#[cfg(test)] +mod tests; |