fix(compiler): check output exists before opening from long-running process

Problem: for long-running processes (typst watch), M.compile() calls
the opener immediately after vim.system() returns, before the process
has produced any output. On first run the output file does not exist
yet, so the opener is called on a nonexistent path.

Solution: guard the open block with vim.uv.fs_stat so it only fires
if the output file already exists at spawn time.
This commit is contained in:
Barrett Ruth 2026-03-03 17:50:36 -05:00
parent e661ea78e8
commit 02958158c0
Signed by: barrett
GPG key ID: A6C96C9349D2FC81

View file

@ -144,7 +144,7 @@ function M.compile(bufnr, name, provider, ctx)
end)
)
if provider.open and not opened[bufnr] and output_file ~= '' then
if provider.open and not opened[bufnr] and output_file ~= '' and vim.uv.fs_stat(output_file) then
if provider.open == true then
vim.ui.open(output_file)
elseif type(provider.open) == 'table' then