diff --git a/nvim/dot-config/nvim/lua/plugins/conform.lua b/nvim/dot-config/nvim/lua/plugins/conform.lua index ec49207..eaa19aa 100644 --- a/nvim/dot-config/nvim/lua/plugins/conform.lua +++ b/nvim/dot-config/nvim/lua/plugins/conform.lua @@ -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 diff --git a/nvim/dot-config/nvim/lua/plugins/mason.lua b/nvim/dot-config/nvim/lua/plugins/mason.lua index 8e64d34..babaa0f 100644 --- a/nvim/dot-config/nvim/lua/plugins/mason.lua +++ b/nvim/dot-config/nvim/lua/plugins/mason.lua @@ -4,27 +4,81 @@ 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 + 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 + tools[tool] = {} + end + 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 + return { - tool[1], + name, condition = tool.condition, + version = tool.version, + auto_update = tool.auto_update, } end - else return tool - end - return nil - end, lsp)) + end) + :totable() require("mason-tool-installer").setup({ ensure_installed = ensure_installed, auto_update = true, + debounde_hours = 24, }) end, }, @@ -36,12 +90,4 @@ return { "neovim/nvim-lspconfig", }, }, - { - "zapling/mason-conform.nvim", - opts = {}, - dependencies = { - { "mason-org/mason.nvim", opts = {} }, - "stevearc/conform.nvim", - }, - }, } diff --git a/nvim/dot-config/nvim/lua/tools/format.lua b/nvim/dot-config/nvim/lua/tools/format.lua index b842eab..8ae65da 100644 --- a/nvim/dot-config/nvim/lua/tools/format.lua +++ b/nvim/dot-config/nvim/lua/tools/format.lua @@ -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" },