summaryrefslogtreecommitdiff
path: root/support/texlab/src/component_db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/component_db.rs')
-rw-r--r--support/texlab/src/component_db.rs151
1 files changed, 0 insertions, 151 deletions
diff --git a/support/texlab/src/component_db.rs b/support/texlab/src/component_db.rs
deleted file mode 100644
index 8dc547369f..0000000000
--- a/support/texlab/src/component_db.rs
+++ /dev/null
@@ -1,151 +0,0 @@
-use std::io::Read;
-
-use flate2::read::GzDecoder;
-use itertools::Itertools;
-use lsp_types::{MarkupContent, MarkupKind};
-use once_cell::sync::Lazy;
-use serde::{Deserialize, Serialize};
-use smol_str::SmolStr;
-
-use crate::{syntax::latex::ExplicitLink, Workspace};
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct ComponentDatabase {
- pub components: Vec<Component>,
- pub metadata: Vec<ComponentMetadata>,
-}
-
-impl ComponentDatabase {
- #[must_use]
- pub fn find(&self, name: &str) -> Option<&Component> {
- self.components.iter().find(|component| {
- component
- .file_names
- .iter()
- .any(|file_name| file_name == name)
- })
- }
-
- #[must_use]
- pub fn find_no_ext(&self, name: &str) -> Option<&Component> {
- self.components.iter().find(|component| {
- component
- .file_names
- .iter()
- .any(|file_name| &file_name[0..file_name.len() - 4] == name)
- })
- }
-
- #[must_use]
- pub fn linked_components(&self, workspace: &Workspace) -> Vec<&Component> {
- let mut start_components = vec![self.kernel()];
- for document in workspace.documents_by_uri.values() {
- if let Some(data) = document.data.as_latex() {
- data.extras
- .explicit_links
- .iter()
- .filter_map(ExplicitLink::as_component_name)
- .filter_map(|name| self.find(&name))
- .for_each(|component| start_components.push(component));
- }
- }
-
- let mut all_components = Vec::new();
- for component in start_components {
- all_components.push(component);
- component
- .references
- .iter()
- .filter_map(|file| self.find(file))
- .for_each(|component| all_components.push(component));
- }
-
- all_components
- .into_iter()
- .unique_by(|component| &component.file_names)
- .collect()
- }
-
- #[must_use]
- pub fn contains(&self, short_name: &str) -> bool {
- let sty = format!("{}.sty", short_name);
- let cls = format!("{}.cls", short_name);
- self.find(&sty).is_some() || self.find(&cls).is_some()
- }
-
- #[must_use]
- pub fn kernel(&self) -> &Component {
- self.components
- .iter()
- .find(|component| component.file_names.is_empty())
- .unwrap()
- }
-
- #[must_use]
- pub fn exists(&self, file_name: &str) -> bool {
- self.components
- .iter()
- .any(|component| component.file_names.iter().any(|f| f == file_name))
- }
-
- #[must_use]
- pub fn documentation(&self, name: &str) -> Option<MarkupContent> {
- let metadata = self
- .metadata
- .iter()
- .find(|metadata| metadata.name == name)?;
-
- let desc = metadata.description.clone()?;
- Some(MarkupContent {
- kind: MarkupKind::PlainText,
- value: desc,
- })
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct Component {
- pub file_names: Vec<SmolStr>,
- pub references: Vec<SmolStr>,
- pub commands: Vec<ComponentCommand>,
- pub environments: Vec<SmolStr>,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct ComponentCommand {
- pub name: SmolStr,
- pub image: Option<String>,
- pub glyph: Option<SmolStr>,
- pub parameters: Vec<ComponentParameter>,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct ComponentParameter(pub Vec<ComponentArgument>);
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct ComponentArgument {
- pub name: SmolStr,
- pub image: Option<String>,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct ComponentMetadata {
- pub name: String,
- pub caption: Option<String>,
- pub description: Option<String>,
-}
-
-const JSON_GZ: &[u8] = include_bytes!("../data/components.json.gz");
-
-pub static COMPONENT_DATABASE: Lazy<ComponentDatabase> = Lazy::new(|| {
- let mut decoder = GzDecoder::new(JSON_GZ);
- let mut buf = String::new();
- decoder.read_to_string(&mut buf).unwrap();
- serde_json::from_str(&buf).unwrap()
-});