return { "neovim/nvim-lspconfig", dependencies = { "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim" }, config = function() require("mason").setup() require("mason-lspconfig").setup({ ensure_installed = { "cmake", "lua_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.keymap.set("n", "o", "ClangdSwitchSourceHeader") vim.lsp.config["cmake"] = {} vim.lsp.config["lua_ls"] = { settings = { completion = { callSnippet = 'Replace' } } } vim.lsp.enable("clangd") vim.lsp.enable("cmake") vim.lsp.enable("lua_ls") end }