local misc = require('core.misc') local lsp = require('core.lsp.functions') local map, auto, augroup = misc.map, misc.auto, misc.augroup return { 'williamboman/mason-lspconfig.nvim', requires = { 'williamboman/mason.nvim', { 'neovim/nvim-lspconfig', disable = vim.version().minor < 8, function() lsp.setup() end } }, function() 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 } } require('mason-lspconfig').setup_handlers { function(server_name) require('lspconfig')[server_name].setup { on_attach = lsp.lsp_attach, capabilities = lsp.capabilities() } 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) require('lspconfig')[server_name].setup { on_attach = lsp.attach, capabilities = lsp.capabilities(), 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) require('lspconfig')[server_name].setup { on_attach = function(client, bufnr) lsp.attach(client, bufnr) -- add some clangd specific mappings local opts = { buffer = bufnr } map("n", "o", "ClangdSwitchSourceHeader", opts) end, capabilities = lsp.capabilities(), 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 } end }