summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/definition/string.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/definition/string.rs')
-rw-r--r--support/texlab/src/features/definition/string.rs42
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());
}