Files
nvim/lua/conf/plugins/mason-lspconfig.lua
2025-05-06 16:51:24 -05:00

137 lines
3.8 KiB
Lua

local misc = require("core.misc")
local lsp = require("core.lsp.functions")
local map = misc.map
return { "williamboman/mason-lspconfig.nvim",
requires = {
"williamboman/mason.nvim",
{ "neovim/nvim-lspconfig",
disable = not vim.fn.has("nvim-0.8.0"),
function()
lsp.setup()
end
},
-- these two update some lsp capabilities and therefore must be run first
-- "hrsh7th/cmp-nvim-lsp",
-- "kevinhwang91/nvim-ufo"
},
function()
local lspconfig = require("lspconfig")
local util = require("lspconfig.util")
-- setup language servers
require("mason-lspconfig").setup {
ensure_installed = {
"lua_ls",
"clangd",
"jdtls",
"phpactor",
"html",
"cssls",
"bashls",
"zls"
-- "asm-lsp", -- seems to be broken
},
-- setup all handlers
handlers = {
function(server_name)
lspconfig[server_name].setup {}
end,
-- setup luals
["lua_ls"] = function(server_name)
local root_files = { ".luarc.json", ".luarc.jsonc", ".luacheckrc",
".stylua.toml", "stylua.toml", "selene.toml", "selene.yml",
"README.md"
}
-- FIXME: luals seems to start up twice and sends back twice the
-- completions (one configured with the below settings and one without)
lspconfig[server_name].setup {
settings = {
Lua = {
diagnostics = {
globals = { "vim", "mp" }
},
runtime = {
version = "LuaJIT"
},
format = {
enable = false
},
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME
}
}
}
},
root_dir = function(fname)
local root = util.root_pattern(unpack(root_files))(fname)
if root and root ~= vim.env.HOME then
return root
end
root = util.root_pattern("lua/")(fname)
if root then
return root
end
return util.find_git_ancestor(fname)
end
}
end,
-- setup clangd
["clangd"] = function(server_name)
lspconfig[server_name].setup {
on_attach = function(client, bufnr)
-- add some clangd specific mappings
local opts = { buffer = bufnr }
map("n", "<leader>o", "<cmd>ClangdSwitchSourceHeader<CR>", opts)
end,
cmd = {
"clangd",
"--background-index",
"--clang-tidy",
"--header-insertion=iwyu",
"--completion-style=detailed",
"--function-arg-placeholders",
"--fallback-style=llvm"
},
init_options = {
usePlaceholders = true,
clangdFileStatus = true,
fallback_flags = {
"-xc" -- makes clangd think we"re using c instead of c++
}
}
}
end,
-- disable it, we start this using nvim-jdtls
["jdtls"] = function(_) end,
-- setup basedpyright
["basedpyright"] = function(server_name)
lspconfig[server_name].setup {
on_attach = function(client, bufnr)
-- add some basedpyright specific mappings
local opts = { buffer = bufnr }
map("n", "cri", "<cmd>PyrightOrganizeImports<CR>", opts)
end,
}
end
},
["openscad_lsp"] = function(server_name)
lspconfig[server_name].setup {}
end
}
end
}