summaryrefslogtreecommitdiff
path: root/support/texlab/crates
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-08-07 03:03:39 +0000
committerNorbert Preining <norbert@preining.info>2023-08-07 03:03:39 +0000
commitaebf6a3b57eda6e22a8e5fb93958edbf6ad1b551 (patch)
tree22fd31bea1ac0ed82dd49684be5ae5415f69fa9a /support/texlab/crates
parentb8344986f0b0553f4794a39ae9b63c6b206cd48d (diff)
CTAN sync 202308070303
Diffstat (limited to 'support/texlab/crates')
-rw-r--r--support/texlab/crates/base-db/src/config.rs2
-rw-r--r--support/texlab/crates/base-db/src/graph.rs5
-rw-r--r--support/texlab/crates/commands/src/clean.rs18
-rw-r--r--support/texlab/crates/commands/src/fwd_search.rs2
-rw-r--r--support/texlab/crates/distro/src/file_name_db.rs4
-rw-r--r--support/texlab/crates/distro/src/lib.rs16
-rw-r--r--support/texlab/crates/texlab/Cargo.toml13
-rw-r--r--support/texlab/crates/texlab/src/server/options.rs10
8 files changed, 49 insertions, 21 deletions
diff --git a/support/texlab/crates/base-db/src/config.rs b/support/texlab/crates/base-db/src/config.rs
index 36063b470c..bffd28b987 100644
--- a/support/texlab/crates/base-db/src/config.rs
+++ b/support/texlab/crates/base-db/src/config.rs
@@ -24,6 +24,7 @@ pub struct BuildConfig {
pub forward_search_after: bool,
pub aux_dir: String,
pub log_dir: String,
+ pub pdf_dir: String,
pub output_filename: Option<PathBuf>,
}
@@ -115,6 +116,7 @@ impl Default for BuildConfig {
forward_search_after: false,
aux_dir: String::from("."),
log_dir: String::from("."),
+ pdf_dir: String::from("."),
output_filename: None,
}
}
diff --git a/support/texlab/crates/base-db/src/graph.rs b/support/texlab/crates/base-db/src/graph.rs
index 3e718afd48..2dd732a449 100644
--- a/support/texlab/crates/base-db/src/graph.rs
+++ b/support/texlab/crates/base-db/src/graph.rs
@@ -137,8 +137,13 @@ impl<'a> Graph<'a> {
let aux_dir = self.workspace.output_dir(base_dir, config.aux_dir.clone());
let log_dir = self.workspace.output_dir(base_dir, config.log_dir.clone());
+ let relative_path = base_dir.make_relative(&source.uri).unwrap();
+
+ self.add_artifact(source, &aux_dir.join(&relative_path).unwrap(), "aux");
self.add_artifact(source, &aux_dir, "aux");
self.add_artifact(source, base_dir, "aux");
+
+ self.add_artifact(source, &log_dir.join(&relative_path).unwrap(), "log");
self.add_artifact(source, &log_dir, "log");
self.add_artifact(source, base_dir, "log");
}
diff --git a/support/texlab/crates/commands/src/clean.rs b/support/texlab/crates/commands/src/clean.rs
index d6c3977fb2..562d9c49b6 100644
--- a/support/texlab/crates/commands/src/clean.rs
+++ b/support/texlab/crates/commands/src/clean.rs
@@ -21,20 +21,26 @@ impl CleanCommand {
anyhow::bail!("document '{}' is not a local file", document.uri)
};
- let dir = workspace.current_dir(&document.dir);
- let dir = workspace
- .output_dir(&dir, workspace.config().build.log_dir.clone())
- .to_file_path()
- .unwrap();
+ let base_dir = workspace.current_dir(&document.dir);
let flag = match target {
CleanTarget::Auxiliary => "-c",
CleanTarget::Artifacts => "-C",
};
+ let out_dir = match target {
+ CleanTarget::Auxiliary => &workspace.config().build.aux_dir,
+ CleanTarget::Artifacts => &workspace.config().build.pdf_dir,
+ };
+
+ let out_dir = workspace
+ .output_dir(&base_dir, out_dir.clone())
+ .to_file_path()
+ .unwrap();
+
let executable = String::from("latexmk");
let args = vec![
- format!("-outdir={}", dir.display()),
+ format!("-outdir={}", out_dir.display()),
String::from(flag),
path.display().to_string(),
];
diff --git a/support/texlab/crates/commands/src/fwd_search.rs b/support/texlab/crates/commands/src/fwd_search.rs
index 153e1245d5..9004ef9b09 100644
--- a/support/texlab/crates/commands/src/fwd_search.rs
+++ b/support/texlab/crates/commands/src/fwd_search.rs
@@ -60,7 +60,7 @@ impl ForwardSearch {
let dir = workspace.current_dir(&parent.dir);
let dir = workspace
- .output_dir(&dir, workspace.config().build.log_dir.clone())
+ .output_dir(&dir, workspace.config().build.pdf_dir.clone())
.to_file_path()
.unwrap();
diff --git a/support/texlab/crates/distro/src/file_name_db.rs b/support/texlab/crates/distro/src/file_name_db.rs
index 750ed11e68..06871bde83 100644
--- a/support/texlab/crates/distro/src/file_name_db.rs
+++ b/support/texlab/crates/distro/src/file_name_db.rs
@@ -47,6 +47,10 @@ pub struct FileNameDB {
}
impl FileNameDB {
+ pub(crate) fn insert(&mut self, path: PathBuf) {
+ self.files.insert(DistroFile(path));
+ }
+
pub fn get(&self, name: &str) -> Option<&Path> {
self.files.get(name).map(|file| file.path())
}
diff --git a/support/texlab/crates/distro/src/lib.rs b/support/texlab/crates/distro/src/lib.rs
index 5ad9a8529c..5c0dbe51fb 100644
--- a/support/texlab/crates/distro/src/lib.rs
+++ b/support/texlab/crates/distro/src/lib.rs
@@ -58,7 +58,7 @@ impl Distro {
}
};
- let file_name_db = match kind {
+ let mut file_name_db = match kind {
DistroKind::Texlive => {
let root_dirs = kpsewhich::root_directories()?;
FileNameDB::parse(&root_dirs, &mut texlive::read_database)?
@@ -70,6 +70,20 @@ impl Distro {
DistroKind::Tectonic | DistroKind::Unknown => FileNameDB::default(),
};
+ if let Some(bibinputs) = std::env::var_os("BIBINPUTS") {
+ for dir in std::env::split_paths(&bibinputs) {
+ if let Ok(entries) = std::fs::read_dir(dir) {
+ for file in entries
+ .flatten()
+ .filter(|entry| entry.file_type().map_or(false, |ty| ty.is_file()))
+ .map(|entry| entry.path())
+ {
+ file_name_db.insert(file);
+ }
+ }
+ }
+ }
+
Ok(Self { kind, file_name_db })
}
}
diff --git a/support/texlab/crates/texlab/Cargo.toml b/support/texlab/crates/texlab/Cargo.toml
index 9bb0654a8b..65752a4e60 100644
--- a/support/texlab/crates/texlab/Cargo.toml
+++ b/support/texlab/crates/texlab/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "texlab"
description = "LaTeX Language Server"
-version = "5.8.0"
+version = "5.9.0"
license.workspace = true
readme = "README.md"
authors.workspace = true
@@ -12,16 +12,7 @@ repository = "https://github.com/latex-lsp/texlab"
documentation = "https://github.com/latex-lsp/texlab"
keywords = ["lsp", "server", "latex", "bibtex"]
categories = ["development-tools"]
-exclude = [
- ".gitattributes",
- ".gitignore",
- ".github/**",
- "tests/it/**",
- "*.snap",
- "texlab.1",
- "texlab.pdf",
- "texlab.tex",
-]
+exclude = ["tests/it/**", "*.snap"]
[[bin]]
name = "texlab"
diff --git a/support/texlab/crates/texlab/src/server/options.rs b/support/texlab/crates/texlab/src/server/options.rs
index ddf20f0a5d..a602e5d792 100644
--- a/support/texlab/crates/texlab/src/server/options.rs
+++ b/support/texlab/crates/texlab/src/server/options.rs
@@ -71,6 +71,7 @@ pub struct BuildOptions {
pub forward_search_after: bool,
pub aux_directory: Option<String>,
pub log_directory: Option<String>,
+ pub pdf_directory: Option<String>,
pub filename: Option<String>,
}
@@ -164,12 +165,17 @@ impl From<Options> for Config {
.or_else(|| value.aux_directory.clone())
.unwrap_or_else(|| String::from("."));
- config.build.log_dir = value
+ config.build.pdf_dir = value
.build
- .log_directory
+ .pdf_directory
.or_else(|| value.aux_directory)
.unwrap_or_else(|| String::from("."));
+ config.build.log_dir = value
+ .build
+ .log_directory
+ .unwrap_or_else(|| config.build.pdf_dir.clone());
+
config.build.output_filename = value.build.filename.map(PathBuf::from);
config.diagnostics.allowed_patterns = value