Use mason-tool-installer to install packages for conform

This commit is contained in:
Dreaded_X 2025-05-26 15:45:54 +02:00
parent 76410a8a52
commit ca2a7c6462
Signed by: Dreaded_X
GPG Key ID: 5A0CBFE3C3377FAA
3 changed files with 85 additions and 22 deletions

View File

@ -2,9 +2,6 @@
local slow_format_filetypes = {}
return {
"stevearc/conform.nvim",
dependencies = {
"williamboman/mason.nvim",
},
event = { "BufWritePre" },
cmd = { "ConformInfo" },
keys = {
@ -19,7 +16,24 @@ return {
},
},
opts = {
formatters_by_ft = require("tools.format"),
formatters_by_ft = (function()
local formatters = require("tools.format")
local formatters_by_ft = {}
for lang, formatter in pairs(formatters) do
formatters_by_ft[lang] = {}
if type(formatter) == "table" then
for _, tool in ipairs(formatter) do
if type(tool) == "table" then
table.insert(formatters_by_ft[lang], tool[1])
else
table.insert(formatters_by_ft[lang], tool)
end
end
end
end
return formatters_by_ft
end)(),
notify_on_error = false,
format_on_save = function(bufnr)
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then

View File

@ -4,27 +4,84 @@ return {
dependencies = {
{ "mason-org/mason.nvim", opts = {} },
"mason-org/mason-lspconfig.nvim",
"zapling/mason-conform.nvim",
},
config = function()
local lsp = require("tools.lsp")
local ensure_installed = vim.tbl_values(vim.tbl_map(function(tool)
-- Convert lsp entries to consistent format
local tools = {}
for _, tool in pairs(lsp) do
if type(tool) == "table" then
if not tool.system then
return {
tool[1],
condition = tool.condition,
}
local name = tool[1]
local entry = {}
-- Make a copy and strip out name and lsp config
for k, v in pairs(tool) do
if k ~= 1 and k ~= 2 then
entry[k] = v
end
end
tools[name] = entry
else
return tool
tools[tool] = {}
end
return nil
end, lsp))
end
-- Convert formatters to same format and merge on top of the lsps
local formatters_by_ft = require("conform").formatters_by_ft
local mapping = require("mason-conform.mapping")
for _, formatter in pairs(formatters_by_ft) do
if type(formatter) == "table" then
for _, tool in ipairs(formatter) do
local entry = {}
local name = nil
if type(tool) == "table" then
name = mapping.conform_to_package[tool[1]]
-- Make a copy and strip out name
for k, v in pairs(tool) do
if k ~= 1 then
entry[k] = v
end
end
else
name = mapping.conform_to_package[tool]
end
if name ~= nil then
tools[name] = vim.tbl_extend("error", tools[name] or {}, entry)
end
end
end
end
local ensure_installed = vim.iter(tools)
:map(function(name, tool)
if type(tool) == "table" then
if tool.system then
return nil
end
local entry = {
[1] = name,
}
for k, v in pairs(tool) do
entry[k] = v
end
return entry
end
return tool
end)
:totable()
require("mason-tool-installer").setup({
ensure_installed = ensure_installed,
auto_update = true,
debounde_hours = 24,
})
end,
},
@ -36,12 +93,4 @@ return {
"neovim/nvim-lspconfig",
},
},
{
"zapling/mason-conform.nvim",
opts = {},
dependencies = {
{ "mason-org/mason.nvim", opts = {} },
"stevearc/conform.nvim",
},
},
}

View File

@ -3,7 +3,7 @@ return {
cpp = { "clang-format" },
go = { "goimports", "gofmt" },
python = { "ruff_organize_imports", "ruff_format" },
rust = { "rustfmt" },
rust = { { "rustfmt", system = true } },
javascript = { "prettierd" },
javascriptreact = { "prettierd" },
typescript = { "prettierd" },