summaryrefslogtreecommitdiff
path: root/support/texlab/crates/base-db/src/deps/root.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/base-db/src/deps/root.rs')
-rw-r--r--support/texlab/crates/base-db/src/deps/root.rs40
1 files changed, 27 insertions, 13 deletions
diff --git a/support/texlab/crates/base-db/src/deps/root.rs b/support/texlab/crates/base-db/src/deps/root.rs
index 442d6f9e35..a8cec6604a 100644
--- a/support/texlab/crates/base-db/src/deps/root.rs
+++ b/support/texlab/crates/base-db/src/deps/root.rs
@@ -1,6 +1,6 @@
use url::Url;
-use crate::{DocumentData, Workspace};
+use crate::{util, DocumentData, Workspace};
use super::graph::HOME_DIR;
@@ -74,6 +74,7 @@ impl ProjectRoot {
}
pub fn from_latexmkrc(workspace: &Workspace, dir: &Url) -> Option<Self> {
+ let config = workspace.config();
let rcfile = workspace
.iter()
.filter(|document| document.dir == *dir)
@@ -81,20 +82,30 @@ impl ProjectRoot {
let compile_dir = dir.clone();
let src_dir = dir.clone();
- let aux_dir = rcfile
+
+ let aux_dir_rc = rcfile
.aux_dir
.as_ref()
- .and_then(|path| append_dir(dir, path).ok())
- .unwrap_or_else(|| dir.clone());
+ .and_then(|path| append_dir(dir, path, workspace).ok());
- let out_dir = rcfile
+ let out_dir_rc = rcfile
.out_dir
.as_ref()
- .and_then(|path| append_dir(dir, path).ok())
+ .and_then(|path| append_dir(dir, path, workspace).ok());
+
+ let aux_dir = aux_dir_rc
+ .clone()
+ .or_else(|| append_dir(dir, &config.build.aux_dir, workspace).ok())
+ .unwrap_or_else(|| dir.clone());
+
+ let log_dir = aux_dir_rc
+ .or_else(|| append_dir(dir, &config.build.log_dir, workspace).ok())
+ .unwrap_or_else(|| dir.clone());
+
+ let pdf_dir = out_dir_rc
+ .or_else(|| append_dir(dir, &config.build.pdf_dir, workspace).ok())
.unwrap_or_else(|| dir.clone());
- let log_dir = out_dir.clone();
- let pdf_dir = out_dir;
let additional_files = vec![];
Some(Self {
@@ -124,9 +135,12 @@ impl ProjectRoot {
let compile_dir = dir.clone();
let src_dir = dir.clone();
let config = workspace.config();
- let aux_dir = append_dir(dir, &config.build.aux_dir).unwrap_or_else(|_| dir.clone());
- let log_dir = append_dir(dir, &config.build.log_dir).unwrap_or_else(|_| dir.clone());
- let pdf_dir = append_dir(dir, &config.build.pdf_dir).unwrap_or_else(|_| dir.clone());
+ let aux_dir =
+ append_dir(dir, &config.build.aux_dir, workspace).unwrap_or_else(|_| dir.clone());
+ let log_dir =
+ append_dir(dir, &config.build.log_dir, workspace).unwrap_or_else(|_| dir.clone());
+ let pdf_dir =
+ append_dir(dir, &config.build.pdf_dir, workspace).unwrap_or_else(|_| dir.clone());
let additional_files = vec![];
Self {
@@ -140,13 +154,13 @@ impl ProjectRoot {
}
}
-fn append_dir(dir: &Url, path: &str) -> Result<Url, url::ParseError> {
+fn append_dir(dir: &Url, path: &str, workspace: &Workspace) -> Result<Url, url::ParseError> {
let mut path = String::from(path);
if !path.ends_with('/') {
path.push('/');
}
- dir.join(&path)
+ util::expand_relative_path(&path, dir, workspace.folders())
}
impl std::fmt::Debug for ProjectRoot {