kickstart.nvim/lua/plugins/mason.lua

129 lines
3.7 KiB
Lua

return {
-- Mason: LSP/DAP/Linter/Formatter installer
{
'mason-org/mason.nvim',
config = function()
require('mason').setup()
-- Add Mason bin directory to PATH
local mason_bin = vim.fn.stdpath 'data' .. '/mason/bin'
local current_path = vim.env.PATH or ''
if not string.find(current_path, mason_bin, 1, true) then
vim.env.PATH = mason_bin .. ':' .. current_path
end
-- Auto-cleanup unused packages (add when deprecating packages)
--
vim.defer_fn(function()
local registry = require 'mason-registry'
local unused_packages = {
'black',
'mypy',
'pyright',
'nixpkgs-fmt',
'python-lsp-server',
'pyflakes',
'pylint',
'pep8',
}
for _, package_name in ipairs(unused_packages) do
if registry.is_installed(package_name) then
local package = registry.get_package(package_name)
package:uninstall():once('closed', function()
vim.notify('Removed unused package: ' .. package_name, vim.log.levels.INFO)
end)
end
end
end, 1000)
end,
},
-- Mason tool installer for formatters/linters
-- Note: mason-lspconfig.nvim is not used for LSP beyond installs, we use vim.lsp fot that
{
'WhoIsSethDaniel/mason-tool-installer.nvim',
dependencies = { 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim' },
config = function()
-- Function to translate LSP server names to Mason package names using mason-lspconfig
local function translate_lsp_names(lsp_servers)
local mason_packages = {}
local ok, mason_lspconfig = pcall(require, 'mason-lspconfig')
if ok then
for _, server in ipairs(lsp_servers) do
local success, package_name = pcall(mason_lspconfig.get_mason_package, server)
if success and package_name then
table.insert(mason_packages, package_name.name)
else
-- Fallback to original name if no mapping found
table.insert(mason_packages, server)
end
end
else
-- If mason-lspconfig not available, use original names
mason_packages = lsp_servers
end
return mason_packages
end
-- LSP servers to install (using mason-lspconfig names)
local lsp_servers = {
'clangd',
'basedpyright',
'bashls', -- bash-language-server
'dockerls', -- dockerfile-language-server
-- 'gopls', -- go
'jedi_language_server',
'lua_ls', -- lua-language-server
'marksman',
'rust_analyzer',
'taplo',
'ts_ls', -- typescript-language-server
'yamlls', -- yaml-language-server
}
-- Other tools
local other_tools = {
-- Formatters
'alejandra', -- nix
'ast-grep',
'clang-format',
'cmakelang',
'isort', -- python
'prettier',
'ruff', -- python
'shfmt',
'stylua',
-- Linters
'ast-grep',
'cmakelint',
'cpplint',
'golangci-lint',
'ruff', -- python
'yamllint',
'golangci-lint',
-- Debuggers
'debugpy',
-- Additional tools
'tree-sitter-cli',
}
-- Combine translated LSP servers with other tools
local all_tools = {}
vim.list_extend(all_tools, translate_lsp_names(lsp_servers))
vim.list_extend(all_tools, other_tools)
require('mason-tool-installer').setup {
ensure_installed = all_tools,
auto_update = false,
run_on_start = true,
}
end,
},
}