summaryrefslogtreecommitdiff
path: root/support/texlab/crates/texlab/src/features/symbol/bibtex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/texlab/src/features/symbol/bibtex.rs')
-rw-r--r--support/texlab/crates/texlab/src/features/symbol/bibtex.rs82
1 files changed, 0 insertions, 82 deletions
diff --git a/support/texlab/crates/texlab/src/features/symbol/bibtex.rs b/support/texlab/crates/texlab/src/features/symbol/bibtex.rs
deleted file mode 100644
index 6ddfe964ce..0000000000
--- a/support/texlab/crates/texlab/src/features/symbol/bibtex.rs
+++ /dev/null
@@ -1,82 +0,0 @@
-use base_db::{Document, DocumentData, LineIndex};
-use rowan::ast::AstNode;
-use syntax::bibtex::{self, HasName, HasType};
-
-use crate::util::{
- lang_data::{BibtexEntryTypeCategory, LANGUAGE_DATA},
- line_index_ext::LineIndexExt,
-};
-
-use super::types::{InternalSymbol, InternalSymbolKind};
-
-pub fn find_symbols(document: &Document, buf: &mut Vec<InternalSymbol>) {
- let DocumentData::Bib(data) = &document.data else { return };
-
- let line_index = &document.line_index;
- for node in data.root_node().children() {
- process_string(node.clone(), line_index, buf)
- .or_else(|| process_entry(node, line_index, buf));
- }
-}
-
-fn process_string(
- node: bibtex::SyntaxNode,
- line_index: &LineIndex,
- buf: &mut Vec<InternalSymbol>,
-) -> Option<()> {
- let string = bibtex::StringDef::cast(node)?;
- let name = string.name_token()?;
- buf.push(InternalSymbol {
- name: name.text().into(),
- label: None,
- kind: InternalSymbolKind::String,
- deprecated: false,
- full_range: line_index.line_col_lsp_range(string.syntax().text_range()),
- selection_range: line_index.line_col_lsp_range(name.text_range()),
- children: Vec::new(),
- });
-
- Some(())
-}
-
-fn process_entry(
- node: bibtex::SyntaxNode,
- line_index: &LineIndex,
- buf: &mut Vec<InternalSymbol>,
-) -> Option<()> {
- let entry = bibtex::Entry::cast(node)?;
- let ty = entry.type_token()?;
- let key = entry.name_token()?;
- let mut children = Vec::new();
- for field in entry.fields() {
- if let Some(name) = field.name_token() {
- let symbol = InternalSymbol {
- name: name.text().to_string(),
- label: None,
- kind: InternalSymbolKind::Field,
- deprecated: false,
- full_range: line_index.line_col_lsp_range(field.syntax().text_range()),
- selection_range: line_index.line_col_lsp_range(name.text_range()),
- children: Vec::new(),
- };
- children.push(symbol);
- }
- }
-
- let category = LANGUAGE_DATA
- .find_entry_type(&ty.text()[1..])
- .map(|ty| ty.category)
- .unwrap_or(BibtexEntryTypeCategory::Misc);
-
- buf.push(InternalSymbol {
- name: key.to_string(),
- label: None,
- kind: InternalSymbolKind::Entry(category),
- deprecated: false,
- full_range: line_index.line_col_lsp_range(entry.syntax().text_range()),
- selection_range: line_index.line_col_lsp_range(key.text_range()),
- children,
- });
-
- Some(())
-}