diff options
Diffstat (limited to 'support/texlab/crates/base-db/src/document.rs')
-rw-r--r-- | support/texlab/crates/base-db/src/document.rs | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/support/texlab/crates/base-db/src/document.rs b/support/texlab/crates/base-db/src/document.rs index 8642694811..9f45876d7e 100644 --- a/support/texlab/crates/base-db/src/document.rs +++ b/support/texlab/crates/base-db/src/document.rs @@ -1,15 +1,12 @@ use std::path::PathBuf; use distro::Language; +use line_index::{LineCol, LineIndex}; use rowan::TextRange; -use syntax::{bibtex, latex, BuildError}; +use syntax::{bibtex, latex, latexmkrc::LatexmkrcData, BuildError}; use url::Url; -use crate::{ - semantics, - util::{LineCol, LineIndex}, - Config, -}; +use crate::{semantics, Config}; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] pub enum Owner { @@ -78,6 +75,10 @@ impl Document { DocumentData::Log(LogDocumentData { errors }) } Language::Root => DocumentData::Root, + Language::Latexmkrc => { + let data = parser::parse_latexmkrc(&text).unwrap_or_default(); + DocumentData::Latexmkrc(data) + } Language::Tectonic => DocumentData::Tectonic, }; @@ -134,6 +135,7 @@ pub enum DocumentData { Aux(AuxDocumentData), Log(LogDocumentData), Root, + Latexmkrc(LatexmkrcData), Tectonic, } @@ -169,6 +171,14 @@ impl DocumentData { None } } + + pub fn as_latexmkrc(&self) -> Option<&LatexmkrcData> { + if let DocumentData::Latexmkrc(data) = self { + Some(data) + } else { + None + } + } } #[derive(Debug, Clone)] @@ -216,4 +226,22 @@ impl<'a> DocumentLocation<'a> { pub fn new(document: &'a Document, range: TextRange) -> Self { Self { document, range } } + + fn eq_key(&self) -> (&Url, TextRange) { + (&self.document.uri, self.range) + } +} + +impl<'a> PartialEq for DocumentLocation<'a> { + fn eq(&self, other: &Self) -> bool { + self.eq_key() == other.eq_key() + } +} + +impl<'a> Eq for DocumentLocation<'a> {} + +impl<'a> std::hash::Hash for DocumentLocation<'a> { + fn hash<H: std::hash::Hasher>(&self, state: &mut H) { + self.eq_key().hash(state) + } } |