Compare commits

...

2 commits

Author SHA1 Message Date
3b15ed7c6c
docs: document extra_args provider field 2026-03-05 22:07:53 -05:00
7f1f8f8d65
feat: add extra_args provider field
Problem: Overriding a single flag (e.g. `-outdir=build`) required
redefining the entire `args` function, duplicating all preset defaults.

Solution: Add `extra_args` field that appends to the resolved `args`
after evaluation. Accepts a static table or a context function.
2026-03-05 22:05:36 -05:00
3 changed files with 9 additions and 0 deletions

View file

@ -68,6 +68,10 @@ Provider fields: ~
receives a |preview.Context| and
returns a string[].
{extra_args} (string[]|function) Appended to {args} after evaluation.
Useful for adding flags to a preset
without replacing its defaults.
{cwd} (string|function) Working directory. If a function,
receives a |preview.Context|.
Default: git root or file directory.

View file

@ -309,6 +309,9 @@ function M.compile(bufnr, name, provider, ctx, opts)
if provider.args then
vim.list_extend(cmd, eval_list(provider.args, resolved_ctx))
end
if provider.extra_args then
vim.list_extend(cmd, eval_list(provider.extra_args, resolved_ctx))
end
log.dbg('compiling buffer %d with provider "%s": %s', bufnr, name, table.concat(cmd, ' '))

View file

@ -2,6 +2,7 @@
---@field ft? string
---@field cmd string[]
---@field args? string[]|fun(ctx: preview.Context): string[]
---@field extra_args? string[]|fun(ctx: preview.Context): string[]
---@field cwd? string|fun(ctx: preview.Context): string
---@field env? table<string, string>
---@field output? string|fun(ctx: preview.Context): string
@ -94,6 +95,7 @@ function M.setup(opts)
vim.validate(prefix .. '.cmd', provider.cmd, 'table')
vim.validate(prefix .. '.cmd[1]', provider.cmd[1], 'string')
vim.validate(prefix .. '.args', provider.args, { 'table', 'function' }, true)
vim.validate(prefix .. '.extra_args', provider.extra_args, { 'table', 'function' }, true)
vim.validate(prefix .. '.cwd', provider.cwd, { 'string', 'function' }, true)
vim.validate(prefix .. '.output', provider.output, { 'string', 'function' }, true)
vim.validate(prefix .. '.error_parser', provider.error_parser, 'function', true)