feat: add extra_args provider field (#51)

* 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.

* docs: document `extra_args` provider field
This commit is contained in:
Barrett Ruth 2026-03-05 22:26:28 -05:00 committed by GitHub
parent 1fbc307bad
commit 12cb20d154
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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)