diff options
Diffstat (limited to 'support/texlab/src/features/definition/string.rs')
-rw-r--r-- | support/texlab/src/features/definition/string.rs | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/support/texlab/src/features/definition/string.rs b/support/texlab/src/features/definition/string.rs index 7162c8b722..09e00fdf92 100644 --- a/support/texlab/src/features/definition/string.rs +++ b/support/texlab/src/features/definition/string.rs @@ -1,43 +1,43 @@ -use cancellation::CancellationToken; use lsp_types::{GotoDefinitionParams, LocationLink}; +use rowan::ast::AstNode; use crate::{ features::cursor::CursorContext, - syntax::{bibtex, CstNode}, + syntax::bibtex::{self, HasName}, LineIndexExt, }; pub fn goto_string_definition( context: &CursorContext<GotoDefinitionParams>, - cancellation_token: &CancellationToken, ) -> Option<Vec<LocationLink>> { let main_document = context.request.main_document(); let data = main_document.data.as_bibtex()?; - let name = context + let key = context .cursor .as_bibtex() - .filter(|token| token.kind() == bibtex::WORD)?; + .filter(|token| token.kind() == bibtex::NAME)?; - bibtex::Token::cast(name.parent())?; + bibtex::Value::cast(key.parent()?)?; let origin_selection_range = main_document .line_index - .line_col_lsp_range(name.text_range()); + .line_col_lsp_range(key.text_range()); - for string in data.root.children().filter_map(bibtex::String::cast) { - cancellation_token.result().ok()?; - - if let Some(string_name) = string.name().filter(|n| n.text() == name.text()) { + for string in bibtex::SyntaxNode::new_root(data.green.clone()) + .children() + .filter_map(bibtex::StringDef::cast) + { + if let Some(string_name) = string.name_token().filter(|k| k.text() == key.text()) { return Some(vec![LocationLink { origin_selection_range: Some(origin_selection_range), - target_uri: main_document.uri.as_ref().clone().into(), + target_uri: main_document.uri.as_ref().clone(), target_selection_range: main_document .line_index .line_col_lsp_range(string_name.text_range()), target_range: main_document .line_index - .line_col_lsp_range(string.small_range()), + .line_col_lsp_range(string.syntax().text_range()), }]); } } @@ -65,7 +65,7 @@ mod tests { .definition(); let context = CursorContext::new(request); - let actual_links = goto_string_definition(&context, CancellationToken::none()); + let actual_links = goto_string_definition(&context); assert!(actual_links.is_none()); } @@ -81,7 +81,7 @@ mod tests { .definition(); let context = CursorContext::new(request); - let actual_links = goto_string_definition(&context, CancellationToken::none()); + let actual_links = goto_string_definition(&context); assert!(actual_links.is_none()); } @@ -102,11 +102,11 @@ mod tests { .line(1) .character(24) .build(); - let target_uri = tester.uri("main.bib").as_ref().clone().into(); + let target_uri = tester.uri("main.bib").as_ref().clone(); let request = tester.definition(); let context = CursorContext::new(request); - let actual_links = goto_string_definition(&context, CancellationToken::none()).unwrap(); + let actual_links = goto_string_definition(&context).unwrap(); let expected_links = vec![LocationLink { origin_selection_range: Some(Range::new_simple(1, 23, 1, 26)), @@ -119,7 +119,7 @@ mod tests { } #[test] - fn concat() { + fn test_concat() { let tester = FeatureTester::builder() .files(vec![( "main.bib", @@ -134,11 +134,11 @@ mod tests { .line(1) .character(24) .build(); - let target_uri = tester.uri("main.bib").as_ref().clone().into(); + let target_uri = tester.uri("main.bib").as_ref().clone(); let request = tester.definition(); let context = CursorContext::new(request); - let actual_links = goto_string_definition(&context, CancellationToken::none()).unwrap(); + let actual_links = goto_string_definition(&context).unwrap(); let expected_links = vec![LocationLink { origin_selection_range: Some(Range::new_simple(1, 23, 1, 26)), @@ -169,7 +169,7 @@ mod tests { let request = tester.definition(); let context = CursorContext::new(request); - let actual_links = goto_string_definition(&context, CancellationToken::none()); + let actual_links = goto_string_definition(&context); assert!(actual_links.is_none()); } |