diff options
Diffstat (limited to 'support/texlab/crates/base-db/src/deps/root.rs')
-rw-r--r-- | support/texlab/crates/base-db/src/deps/root.rs | 40 |
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 { |