feature request:
Did you check existing requests?
- [X] I have searched the existing issues
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
conform.setup({
formatters_by_ft = {
javascript = { { "prettierd", "prettier" } },
},
})
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 table
is 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(??)
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 ?
https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#run-the-first-available-formatter-followed-by-more-formatters
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" })