summaryrefslogtreecommitdiff
path: root/support/texlab/crates/base-db/src/document.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/base-db/src/document.rs')
-rw-r--r--support/texlab/crates/base-db/src/document.rs40
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)
+ }
}