texlab-patched
All checks were successful
CI / Build Packages (default) (push) Successful in 52s
CI / Build Packages (example-a) (push) Successful in 49s
CI / Nix Flake Check (push) Successful in 1m58s
CI / Build Packages (example-b) (push) Successful in 48s
CI / Build Packages (pyzotero) (push) Successful in 53s
CI / Build Packages (pyzotero-cli) (push) Successful in 56s
All checks were successful
CI / Build Packages (default) (push) Successful in 52s
CI / Build Packages (example-a) (push) Successful in 49s
CI / Nix Flake Check (push) Successful in 1m58s
CI / Build Packages (example-b) (push) Successful in 48s
CI / Build Packages (pyzotero) (push) Successful in 53s
CI / Build Packages (pyzotero-cli) (push) Successful in 56s
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,3 +2,4 @@ result
|
||||
result-*
|
||||
.direnv
|
||||
/.envrc
|
||||
/.agent-shell/
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
{
|
||||
pkgs,
|
||||
system,
|
||||
@@ -12,6 +11,7 @@ pkgs.mkShell {
|
||||
nixfmt-rfc-style
|
||||
nil
|
||||
nix-tree
|
||||
nix
|
||||
(jailed-agents.lib.${system}.makeJailed system {
|
||||
agentTool = "opencode";
|
||||
extraPkgs =
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
jailed-agents.url = "git+https://gitea@gitea.bueso.eu/luis/jailed-agents";
|
||||
mcp-servers.url = "git+https://gitea@gitea.bueso.eu/luis/mcp-servers";
|
||||
texlab-src = {
|
||||
url = "github:latex-lsp/texlab/v5.25.1";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
@@ -24,6 +28,7 @@
|
||||
flake-utils,
|
||||
jailed-agents,
|
||||
mcp-servers,
|
||||
texlab-src,
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (
|
||||
system:
|
||||
@@ -31,7 +36,9 @@
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
packages = import ./pkgs { inherit pkgs; };
|
||||
packages = import ./pkgs {
|
||||
inherit pkgs texlab-src;
|
||||
};
|
||||
|
||||
devShells.default = import ./devshells {
|
||||
inherit pkgs system;
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{ pkgs }:
|
||||
{
|
||||
pkgs,
|
||||
texlab-src,
|
||||
}:
|
||||
let
|
||||
self = {
|
||||
example-a = pkgs.callPackage ./example-a { };
|
||||
@@ -9,6 +12,9 @@ let
|
||||
};
|
||||
khal-export = pkgs.callPackage ./khal-export { };
|
||||
org-zotero-export = pkgs.callPackage ./org-zotero-export { };
|
||||
texlab = pkgs.callPackage ./texlab {
|
||||
inherit texlab-src;
|
||||
};
|
||||
};
|
||||
in
|
||||
self // { default = self.example-a; }
|
||||
|
||||
24
pkgs/texlab/default.nix
Normal file
24
pkgs/texlab/default.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
lib,
|
||||
rustPlatform,
|
||||
pkg-config,
|
||||
openssl,
|
||||
texlab-src,
|
||||
}:
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "texlab";
|
||||
version = "5.25.1-patched";
|
||||
src = texlab-src;
|
||||
cargoLock.lockFile = "${texlab-src}/Cargo.lock";
|
||||
patches = [ ./patches/subfile-diagnostics.patch ];
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ openssl ];
|
||||
|
||||
meta = {
|
||||
description = "Texlab with subfile diagnostic fix";
|
||||
mainProgram = "texlab";
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
}
|
||||
36
pkgs/texlab/patches/subfile-diagnostics.patch
Normal file
36
pkgs/texlab/patches/subfile-diagnostics.patch
Normal file
@@ -0,0 +1,36 @@
|
||||
diff --git a/crates/diagnostics/src/build_log.rs b/crates/diagnostics/src/build_log.rs
|
||||
index 1234567..abcdefg 100644
|
||||
--- a/crates/diagnostics/src/build_log.rs
|
||||
+++ b/crates/diagnostics/src/build_log.rs
|
||||
@@ -14,8 +14,13 @@ pub fn update(
|
||||
|
||||
let data = log_document.data.as_log()?;
|
||||
|
||||
- let parents = deps::parents(workspace, log_document);
|
||||
- let root_document = parents.iter().next()?;
|
||||
+ // Try to find the compiled .tex file from the log file name first.
|
||||
+ // This handles subfile compilation where the subfile is the actual root.
|
||||
+ let root_document = find_compiled_document(workspace, log_document)
|
||||
+ .or_else(|| {
|
||||
+ // Fallback to original behavior: find parent via dependency graph
|
||||
+ deps::parents(workspace, log_document).into_iter().next()
|
||||
+ })?;
|
||||
|
||||
let base_path = root_document
|
||||
.path
|
||||
@@ -57,3 +62,14 @@ fn find_range_of_hint(document: &Document, error: &BuildError) -> Option<TextRan
|
||||
let hint_end = hint_start + hint.text_len();
|
||||
Some(TextRange::new(hint_start, hint_end))
|
||||
}
|
||||
+
|
||||
+/// Given a .log file, find the corresponding .tex file that was compiled.
|
||||
+/// E.g., `/path/to/chapter.log` -> `/path/to/chapter.tex`
|
||||
+fn find_compiled_document<'a>(
|
||||
+ workspace: &'a Workspace,
|
||||
+ log_document: &Document,
|
||||
+) -> Option<&'a Document> {
|
||||
+ let log_path = log_document.path.as_ref()?;
|
||||
+ let tex_path = log_path.with_extension("tex");
|
||||
+ let tex_uri = Url::from_file_path(&tex_path).ok()?;
|
||||
+ workspace.lookup(&tex_uri)
|
||||
+}
|
||||
Reference in New Issue
Block a user