nvim1/lua/functions/lsp.lua

94 lines
2.6 KiB
Lua

-- Mason package name to LSP server name mapping
local mason_to_lsp = {
["lua-language-server"] = "lua_ls",
["typescript-language-server"] = "ts_ls",
["rust-analyzer"] = "rust_analyzer",
["gopls"] = "gopls",
["pyright"] = "pyright",
["clangd"] = "clangd",
["bash-language-server"] = "bashls",
["yaml-language-server"] = "yamlls",
}
-- Get installed LSP servers from Mason
local function get_mason_installed_servers()
local mason_registry = require("mason-registry")
local installed_servers = {}
for _, pkg in ipairs(mason_registry.get_installed_packages()) do
local lsp_name = mason_to_lsp[pkg.name]
if lsp_name then
table.insert(installed_servers, lsp_name)
end
end
return installed_servers
end
if require("commons").tools.is_version_gte_0_11() then
-- Neovim 0.11+ native LSP configuration
vim.lsp.config("*", {
capabilities = require("blink.cmp").get_lsp_capabilities(),
root_markers = { ".git" },
})
-- Get installed servers from Mason
local installed_servers = get_mason_installed_servers()
-- Configure and enable installed servers
for _, server in ipairs(installed_servers) do
local ok, settings = pcall(require, "lsp." .. server)
if ok then
vim.lsp.config(server, settings)
else
-- Basic configuration for servers without custom config
vim.lsp.config(server, {})
end
vim.lsp.enable(server)
end
-- Also configure servers from commons.servers that have custom configs
for _, server in pairs(require("commons").servers) do
local ok, settings = pcall(require, "lsp." .. server)
if ok then
vim.lsp.config(server, settings)
vim.lsp.enable(server)
end
end
vim.diagnostic.config({
update_in_insert = true,
severity_sort = true,
float = { source = true },
virtual_text = true,
})
else
-- Legacy nvim-lspconfig setup for Neovim < 0.11
local lspconfig = require("lspconfig")
local capabilities = require("blink.cmp").get_lsp_capabilities()
-- Get installed servers from Mason
local installed_servers = get_mason_installed_servers()
-- Configure installed servers
for _, server in ipairs(installed_servers) do
local ok, settings = pcall(require, "lsp." .. server)
if ok then
settings.capabilities = capabilities
lspconfig[server].setup(settings)
else
-- Basic configuration for servers without custom config
lspconfig[server].setup({ capabilities = capabilities })
end
end
-- Also configure servers from commons.servers
for _, server in pairs(require("commons").servers) do
local ok, settings = pcall(require, "lsp." .. server)
if ok then
settings.capabilities = capabilities
lspconfig[server].setup(settings)
end
end
end