summaryrefslogtreecommitdiff
path: root/support/texlab/src/db
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/db')
-rw-r--r--support/texlab/src/db/analysis.rs10
-rw-r--r--support/texlab/src/db/document.rs23
-rw-r--r--support/texlab/src/db/workspace.rs2
3 files changed, 22 insertions, 13 deletions
diff --git a/support/texlab/src/db/analysis.rs b/support/texlab/src/db/analysis.rs
index 35ee4be2a1..79e81c963c 100644
--- a/support/texlab/src/db/analysis.rs
+++ b/support/texlab/src/db/analysis.rs
@@ -149,6 +149,16 @@ pub struct TexAnalysis {
pub environment_names: Vec<String>,
}
+#[salsa::tracked]
+impl TexAnalysis {
+ #[salsa::tracked]
+ pub fn has_document_environment(self, db: &dyn Db) -> bool {
+ self.environment_names(db)
+ .iter()
+ .any(|name| name == "document")
+ }
+}
+
impl TexAnalysis {
pub(super) fn analyze(db: &dyn Db, root: &latex::SyntaxNode) -> Self {
let mut links = Vec::new();
diff --git a/support/texlab/src/db/document.rs b/support/texlab/src/db/document.rs
index 4ee23a2230..1fc7d6880c 100644
--- a/support/texlab/src/db/document.rs
+++ b/support/texlab/src/db/document.rs
@@ -175,23 +175,22 @@ impl Document {
}
#[salsa::tracked]
- pub fn can_be_index(self, db: &dyn Db) -> bool {
+ pub fn can_be_root(self, db: &dyn Db) -> bool {
self.parse(db).as_tex().map_or(false, |data| {
- data.analyze(db)
- .links(db)
- .iter()
- .filter(|link| link.kind(db) == TexLinkKind::Cls)
- .any(|link| link.path(db).text(db) != "subfiles")
+ let analysis = data.analyze(db);
+ analysis.has_document_environment(db)
+ || !analysis
+ .links(db)
+ .iter()
+ .filter(|link| link.kind(db) == TexLinkKind::Cls)
+ .any(|link| link.path(db).text(db) == "subfiles")
})
}
#[salsa::tracked]
pub fn can_be_built(self, db: &dyn Db) -> bool {
- self.parse(db).as_tex().map_or(false, |data| {
- data.analyze(db)
- .links(db)
- .iter()
- .any(|link| link.kind(db) == TexLinkKind::Cls)
- })
+ self.parse(db)
+ .as_tex()
+ .map_or(false, |data| data.analyze(db).has_document_environment(db))
}
}
diff --git a/support/texlab/src/db/workspace.rs b/support/texlab/src/db/workspace.rs
index 0fb9745b12..8b4d755b09 100644
--- a/support/texlab/src/db/workspace.rs
+++ b/support/texlab/src/db/workspace.rs
@@ -67,7 +67,7 @@ impl Workspace {
self.documents(db)
.iter()
.copied()
- .filter(|&document| document.can_be_index(db))
+ .filter(|&document| document.can_be_root(db))
}
pub fn open(