Open beaumccartney opened 4 months ago
My question is, how to now run multiple formatters + conditionally run first available?
In my config I had the following
tldr; for go
files run goimports
+ gofumpt
(if available) or gofmt
require('conform').setup({
formatters_by_ft = {
go = { 'goimports', { 'gofumpt', 'gofmt' } },
javascript = { { 'prettierd', 'prettier' }, 'eslint_d' },
javascriptreact = { { 'prettierd', 'prettier' }, 'eslint_d' },
})
How can I now achieve this in stop_after_first
?
In addition to the function linked above, I also made this expandFormatters
so that you can just keep the old format, because calling the first in a custom function every time is silly
---@param bufnr integer
---@param ... string
---@return string
local function first(bufnr, ...)
local conform = require("conform")
for i = 1, select("#", ...) do
local formatter = select(i, ...)
if conform.get_formatter_info(formatter, bufnr).available then
return formatter
end
end
return select(1, ...)
end
local function expandFormatters(formatters)
return function(bufnr)
local result = {}
for i = 1, #formatters do
local formatter = formatters[i]
if type(formatter) == "table" then
result[i] = first(bufnr, unpack(formatter))
else
result[i] = formatter
end
end
return result
end
end
typescript = expandFormatters({ { "prettierd", "prettier" }, "rustywind", lsp_format = "fallback" })
Did you check existing requests?
Describe the feature
in the old syntax, I could list a few formatters to try in order, and stop at the first just in the setup call i.e. per filetype
for js files, this would use prettierd if available, and prettier otherwise.
afaik that api's deprecated (message everytime I use it), but from my reading and code spelunking, its not actually possible to specify
stop_after_first
in the tableis it possible to use the old functionality without using the deprecated api?
Provide background
provided above
What is the significance of this feature?
strongly desired
Additional details
was an old feature, was removed(??)