summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/symbol/bibtex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/symbol/bibtex.rs')
-rw-r--r--support/texlab/src/features/symbol/bibtex.rs40
1 files changed, 17 insertions, 23 deletions
diff --git a/support/texlab/src/features/symbol/bibtex.rs b/support/texlab/src/features/symbol/bibtex.rs
index db555a7176..bbc9026b0b 100644
--- a/support/texlab/src/features/symbol/bibtex.rs
+++ b/support/texlab/src/features/symbol/bibtex.rs
@@ -1,30 +1,24 @@
-use cancellation::CancellationToken;
+use lsp_types::DocumentSymbolParams;
+use rowan::ast::AstNode;
use crate::{
- syntax::{
- bibtex::{self, HasType},
- CstNode,
- },
- BibtexEntryTypeCategory, LineIndexExt, WorkspaceSubset, LANGUAGE_DATA,
+ features::FeatureRequest,
+ syntax::bibtex::{self, HasName, HasType},
+ BibtexEntryTypeCategory, LineIndexExt, LANGUAGE_DATA,
};
use super::types::{InternalSymbol, InternalSymbolKind};
pub fn find_bibtex_symbols(
- subset: &WorkspaceSubset,
+ request: &FeatureRequest<DocumentSymbolParams>,
buf: &mut Vec<InternalSymbol>,
- token: &CancellationToken,
) -> Option<()> {
- let main_document = subset.documents.first()?;
+ let main_document = request.main_document();
let data = main_document.data.as_bibtex()?;
- for node in data.root.children() {
- if token.is_canceled() {
- return None;
- }
-
- if let Some(string) = bibtex::String::cast(node) {
- if let Some(name) = string.name() {
+ for node in bibtex::SyntaxNode::new_root(data.green.clone()).children() {
+ if let Some(string) = bibtex::StringDef::cast(node.clone()) {
+ if let Some(name) = string.name_token() {
buf.push(InternalSymbol {
name: name.text().into(),
label: None,
@@ -32,7 +26,7 @@ pub fn find_bibtex_symbols(
deprecated: false,
full_range: main_document
.line_index
- .line_col_lsp_range(string.small_range()),
+ .line_col_lsp_range(string.syntax().text_range()),
selection_range: main_document
.line_index
.line_col_lsp_range(name.text_range()),
@@ -40,11 +34,11 @@ pub fn find_bibtex_symbols(
})
}
} else if let Some(entry) = bibtex::Entry::cast(node) {
- if let Some(ty) = entry.ty() {
- if let Some(key) = entry.key() {
+ if let Some(ty) = entry.type_token() {
+ if let Some(key) = entry.name_token() {
let mut children = Vec::new();
for field in entry.fields() {
- if let Some(name) = field.name() {
+ if let Some(name) = field.name_token() {
let symbol = InternalSymbol {
name: name.text().to_string(),
label: None,
@@ -52,7 +46,7 @@ pub fn find_bibtex_symbols(
deprecated: false,
full_range: main_document
.line_index
- .line_col_lsp_range(field.small_range()),
+ .line_col_lsp_range(field.syntax().text_range()),
selection_range: main_document
.line_index
.line_col_lsp_range(name.text_range()),
@@ -74,10 +68,10 @@ pub fn find_bibtex_symbols(
deprecated: false,
full_range: main_document
.line_index
- .line_col_lsp_range(entry.small_range()),
+ .line_col_lsp_range(entry.syntax().text_range()),
selection_range: main_document
.line_index
- .line_col_lsp_range(key.small_range()),
+ .line_col_lsp_range(key.text_range()),
children,
});
}