diff options
Diffstat (limited to 'support/texlab/src/db')
-rw-r--r-- | support/texlab/src/db/analysis.rs | 10 | ||||
-rw-r--r-- | support/texlab/src/db/document.rs | 23 | ||||
-rw-r--r-- | support/texlab/src/db/workspace.rs | 2 |
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( |