return { "neovim/nvim-lspconfig", dependencies = { "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim" }, config = function() require("mason").setup() require("mason-lspconfig").setup({ ensure_installed = {"neocmake", "lua_ls", "cssls", "ts_ls"} }) vim.lsp.config["clangd"] = { cmd = { "clangd", "--background-index", "--clang-tidy", "--header-insertion=iwyu", "--completion-style=detailed", "--function-arg-placeholders", "--fallback-style=llvm" }, root_markers = { { "CMakeLists.txt", "Makefile", "configure.ac", "configure.in", "config.h.in", "meson.build", "meson_options.txt", "build.ninja" }, {"compile_commands.json", "compile_flags.txt"}, {".git"} }, filetypes = {"cpp", "hpp", "c", "h"}, capabilities = { offsetEncoding = {"utf-16"}, textDocument = { semanticTokens = {multilineTokenSupport = true}, completion = {completionItem = {snippetSupport = true}} } }, init_options = { usePlaceholders = true, completeUnimported = true, clangdFileStatus = true } } vim.diagnostic.config({virtual_text = true}) vim.keymap.set("n", "o", "LspClangdSwitchSourceHeader") vim.lsp.config["neocmake"] = {} vim.lsp.config["lua_ls"] = { settings = { completion = {callSnippet = 'Replace'}, Lua = {diagnostics = {globals = {"vim"}}} } } vim.lsp.enable("clangd") vim.lsp.enable("neocmake") vim.lsp.enable("lua_ls") end }