diff options
Diffstat (limited to 'support/texlab/src/features/rename/label.rs')
-rw-r--r-- | support/texlab/src/features/rename/label.rs | 37 |
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(), )); } |