summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/rename/label.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/rename/label.rs')
-rw-r--r--support/texlab/src/features/rename/label.rs37
1 files changed, 16 insertions, 21 deletions
diff --git a/support/texlab/src/features/rename/label.rs b/support/texlab/src/features/rename/label.rs
index 11b414ccfa..a73a0064bf 100644
--- a/support/texlab/src/features/rename/label.rs
+++ b/support/texlab/src/features/rename/label.rs
@@ -13,20 +13,14 @@ pub fn prepare_label_rename<P: HasPosition>(
context: &CursorContext<P>,
_cancellation_token: &CancellationToken,
) -> Option<Range> {
- let name = context.cursor.as_latex()?;
- name.parent().parent().filter(|node| {
- matches!(
- node.kind(),
- latex::LABEL_DEFINITION | latex::LABEL_REFERENCE | latex::LABEL_REFERENCE_RANGE
- )
- })?;
+ let (_, range) = context.find_label_name_key()?;
Some(
context
.request
.main_document()
.line_index
- .line_col_lsp_range(name.text_range()),
+ .line_col_lsp_range(range),
)
}
@@ -35,7 +29,8 @@ pub fn rename_label(
cancellation_token: &CancellationToken,
) -> Option<WorkspaceEdit> {
prepare_label_rename(context, cancellation_token)?;
- let name_text = context.cursor.as_latex()?.text();
+ let (name_text, _) = context.find_label_name_key()?;
+
let mut changes = HashMap::new();
for document in &context.request.subset.documents {
cancellation_token.result().ok()?;
@@ -44,9 +39,9 @@ pub fn rename_label(
for node in data.root.descendants() {
if let Some(range) = latex::LabelDefinition::cast(node)
.and_then(|label| label.name())
- .and_then(|name| name.word())
- .filter(|name| name.text() == name_text)
- .map(|name| document.line_index.line_col_lsp_range(name.text_range()))
+ .and_then(|name| name.key())
+ .filter(|name| name.to_string() == name_text)
+ .map(|name| document.line_index.line_col_lsp_range(name.small_range()))
{
edits.push(TextEdit::new(
range,
@@ -57,9 +52,9 @@ pub fn rename_label(
latex::LabelReference::cast(node)
.and_then(|label| label.name_list())
.into_iter()
- .flat_map(|label| label.words())
- .filter(|name| name.text() == name_text)
- .map(|name| document.line_index.line_col_lsp_range(name.text_range()))
+ .flat_map(|label| label.keys())
+ .filter(|name| name.to_string() == name_text)
+ .map(|name| document.line_index.line_col_lsp_range(name.small_range()))
.for_each(|range| {
edits.push(TextEdit::new(
range,
@@ -70,22 +65,22 @@ pub fn rename_label(
if let Some(label) = latex::LabelReferenceRange::cast(node) {
if let Some(name1) = label
.from()
- .and_then(|name| name.word())
- .filter(|name| name.text() == name_text)
+ .and_then(|name| name.key())
+ .filter(|name| name.to_string() == name_text)
{
edits.push(TextEdit::new(
- document.line_index.line_col_lsp_range(name1.text_range()),
+ document.line_index.line_col_lsp_range(name1.small_range()),
context.request.params.new_name.clone(),
));
}
if let Some(name2) = label
.from()
- .and_then(|name| name.word())
- .filter(|name| name.text() == name_text)
+ .and_then(|name| name.key())
+ .filter(|name| name.to_string() == name_text)
{
edits.push(TextEdit::new(
- document.line_index.line_col_lsp_range(name2.text_range()),
+ document.line_index.line_col_lsp_range(name2.small_range()),
context.request.params.new_name.clone(),
));
}