Files
dotfiles/dot_config/nvim/lua/plugins/lsp.lua

80 lines
2.3 KiB
Lua

return {
-- Mason: installs LSP servers, formatters, DAP adapters
{
"williamboman/mason.nvim",
cmd = "Mason",
build = ":MasonUpdate",
opts = {
ui = { icons = { package_installed = "", package_pending = "", package_uninstalled = "" } },
},
},
-- mason-lspconfig bridges mason ↔ vim.lsp.enable
{
"williamboman/mason-lspconfig.nvim",
dependencies = { "williamboman/mason.nvim" },
opts = {
ensure_installed = {
"lua_ls", "rust_analyzer", "ts_ls", "svelte",
"html", "texlab", "marksman", "yamlls", "taplo",
-- ltex managed via mason-tool-installer for version control
},
automatic_installation = false,
},
},
-- mason-tool-installer: formatters, linters, DAP, extra servers
{
"WhoIsSethDaniel/mason-tool-installer.nvim",
dependencies = { "williamboman/mason.nvim" },
opts = {
ensure_installed = {
-- LSP servers
"lua-language-server",
"rust-analyzer",
"typescript-language-server",
"svelte-language-server",
"html-lsp",
"texlab",
"marksman",
"yaml-language-server",
"taplo",
"ltex-ls",
-- Formatters
"stylua",
"prettier",
-- rustfmt is managed by rustup, not mason
"google-java-format",
"djlint",
-- DAP
"codelldb",
"js-debug-adapter",
},
auto_update = false,
run_on_start = true,
},
config = function(_, opts)
require("mason-tool-installer").setup(opts)
-- Enable servers after mason installs them
-- Server configs loaded by init.lua (lua/lsp/*.lua)
vim.api.nvim_create_autocmd("User", {
pattern = "MasonToolsStartingInstall",
once = true,
callback = function()
vim.schedule(function()
vim.lsp.enable({
"lua_ls", "rust_analyzer", "ts_ls", "svelte",
"html", "texlab", "marksman", "yamlls", "taplo", "ltex",
})
end)
end,
})
-- Also enable on startup (for machines where tools are already installed)
vim.lsp.enable({
"lua_ls", "rust_analyzer", "ts_ls", "svelte",
"html", "texlab", "marksman", "yamlls", "taplo", "ltex",
})
end,
},
}