fix(presets): add --failure-level ERROR to asciidoctor, add clean to typst/pdflatex/tectonic, skip auto-open on one-shot compile (#35)
Problem: asciidoctor exits 0 on errors so error_parser never ran. typst, pdflatex, and tectonic had no clean subcommand. auto-open fired on :Preview compile, surprising users who just want a build. Solution: pass --failure-level ERROR in asciidoctor args. Add clean commands to typst (rm pdf), pdflatex (rm pdf/aux/log/synctex.gz), and tectonic (rm pdf). Gate auto-open on not opts.oneshot so it only fires during toggle/watch mode.
This commit is contained in:
parent
d4e7d8c2fd
commit
68e2e82232
3 changed files with 30 additions and 6 deletions
|
|
@ -162,6 +162,7 @@ function M.compile(bufnr, name, provider, ctx, opts)
|
||||||
|
|
||||||
if
|
if
|
||||||
provider.open
|
provider.open
|
||||||
|
and not opts.oneshot
|
||||||
and not opened[bufnr]
|
and not opened[bufnr]
|
||||||
and output_file ~= ''
|
and output_file ~= ''
|
||||||
and vim.uv.fs_stat(output_file)
|
and vim.uv.fs_stat(output_file)
|
||||||
|
|
@ -240,6 +241,7 @@ function M.compile(bufnr, name, provider, ctx, opts)
|
||||||
end
|
end
|
||||||
if
|
if
|
||||||
provider.open
|
provider.open
|
||||||
|
and not opts.oneshot
|
||||||
and not opened[bufnr]
|
and not opened[bufnr]
|
||||||
and output_file ~= ''
|
and output_file ~= ''
|
||||||
and vim.uv.fs_stat(output_file)
|
and vim.uv.fs_stat(output_file)
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,9 @@ M.typst = {
|
||||||
error_parser = function(output)
|
error_parser = function(output)
|
||||||
return parse_typst(output)
|
return parse_typst(output)
|
||||||
end,
|
end,
|
||||||
|
clean = function(ctx)
|
||||||
|
return { 'rm', '-f', (ctx.file:gsub('%.typ$', '.pdf')) }
|
||||||
|
end,
|
||||||
open = true,
|
open = true,
|
||||||
reload = function(ctx)
|
reload = function(ctx)
|
||||||
return { 'typst', 'watch', ctx.file }
|
return { 'typst', 'watch', ctx.file }
|
||||||
|
|
@ -172,6 +175,10 @@ M.pdflatex = {
|
||||||
error_parser = function(output)
|
error_parser = function(output)
|
||||||
return parse_latexmk(output)
|
return parse_latexmk(output)
|
||||||
end,
|
end,
|
||||||
|
clean = function(ctx)
|
||||||
|
local base = ctx.file:gsub('%.tex$', '')
|
||||||
|
return { 'rm', '-f', base .. '.pdf', base .. '.aux', base .. '.log', base .. '.synctex.gz' }
|
||||||
|
end,
|
||||||
open = true,
|
open = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -188,6 +195,9 @@ M.tectonic = {
|
||||||
error_parser = function(output)
|
error_parser = function(output)
|
||||||
return parse_latexmk(output)
|
return parse_latexmk(output)
|
||||||
end,
|
end,
|
||||||
|
clean = function(ctx)
|
||||||
|
return { 'rm', '-f', (ctx.file:gsub('%.tex$', '.pdf')) }
|
||||||
|
end,
|
||||||
open = true,
|
open = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -246,7 +256,7 @@ M.asciidoctor = {
|
||||||
ft = 'asciidoc',
|
ft = 'asciidoc',
|
||||||
cmd = { 'asciidoctor' },
|
cmd = { 'asciidoctor' },
|
||||||
args = function(ctx)
|
args = function(ctx)
|
||||||
return { ctx.file, '-o', ctx.output }
|
return { '--failure-level', 'ERROR', ctx.file, '-o', ctx.output }
|
||||||
end,
|
end,
|
||||||
output = function(ctx)
|
output = function(ctx)
|
||||||
return (ctx.file:gsub('%.adoc$', '.html'))
|
return (ctx.file:gsub('%.adoc$', '.html'))
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,10 @@ describe('presets', function()
|
||||||
assert.are.equal('/tmp/document.pdf', output)
|
assert.are.equal('/tmp/document.pdf', output)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('returns clean command', function()
|
||||||
|
assert.are.same({ 'rm', '-f', '/tmp/document.pdf' }, presets.typst.clean(ctx))
|
||||||
|
end)
|
||||||
|
|
||||||
it('has open enabled', function()
|
it('has open enabled', function()
|
||||||
assert.is_true(presets.typst.open)
|
assert.is_true(presets.typst.open)
|
||||||
end)
|
end)
|
||||||
|
|
@ -189,8 +193,16 @@ describe('presets', function()
|
||||||
assert.is_true(presets.pdflatex.open)
|
assert.is_true(presets.pdflatex.open)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('has no clean command', function()
|
it('returns clean command removing pdf and aux files', function()
|
||||||
assert.is_nil(presets.pdflatex.clean)
|
local clean = presets.pdflatex.clean(tex_ctx)
|
||||||
|
assert.are.same({
|
||||||
|
'rm',
|
||||||
|
'-f',
|
||||||
|
'/tmp/document.pdf',
|
||||||
|
'/tmp/document.aux',
|
||||||
|
'/tmp/document.log',
|
||||||
|
'/tmp/document.synctex.gz',
|
||||||
|
}, clean)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('has no reload', function()
|
it('has no reload', function()
|
||||||
|
|
@ -240,8 +252,8 @@ describe('presets', function()
|
||||||
assert.is_true(presets.tectonic.open)
|
assert.is_true(presets.tectonic.open)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('has no clean command', function()
|
it('returns clean command removing pdf', function()
|
||||||
assert.is_nil(presets.tectonic.clean)
|
assert.are.same({ 'rm', '-f', '/tmp/document.pdf' }, presets.tectonic.clean(tex_ctx))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('has no reload', function()
|
it('has no reload', function()
|
||||||
|
|
@ -467,7 +479,7 @@ describe('presets', function()
|
||||||
|
|
||||||
it('returns args with file and output', function()
|
it('returns args with file and output', function()
|
||||||
assert.are.same(
|
assert.are.same(
|
||||||
{ '/tmp/document.adoc', '-o', '/tmp/document.html' },
|
{ '--failure-level', 'ERROR', '/tmp/document.adoc', '-o', '/tmp/document.html' },
|
||||||
presets.asciidoctor.args(adoc_ctx)
|
presets.asciidoctor.args(adoc_ctx)
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue