local function lsp_highlight_document(client) if client.server_capabilities.document_highlight then vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true }) vim.api.nvim_create_autocmd("CursorHold", { group = "lsp_document_highlight", buffer = 0, callback = function() vim.lsp.buf.document_highlight() end, }) vim.api.nvim_create_autocmd("CursorMoved", { group = "lsp_document_highlight", buffer = 0, callback = function() vim.lsp.buf.clear_references() end, }) end end local function lsp_keymaps(bufnr) local opts = { noremap = true, silent = true } vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "lua vim.lsp.buf.implementation()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "", "lua vim.lsp.buf.signature_help()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", 'lua vim.diagnostic.goto_prev({border="rounded"})', opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", 'lua vim.diagnostic.goto_next({border="rounded"})', opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "lr", "lua vim.lsp.buf.rename()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "q", "lua vim.diagnostic.setloclist()", opts) vim.api.nvim_buf_set_keymap( bufnr, "n", "td", "lua require 'telescope.builtin'.diagnostics()", opts ) vim.api.nvim_buf_set_keymap( bufnr, "n", "tr", "lua require 'telescope.builtin'.lsp_references()", opts ) end local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") if not status_ok then print("Failed to require cmp_nvim_lsp") return end local client_capabilities = vim.lsp.protocol.make_client_capabilities() local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities) local util = require 'lspconfig.util' return { default_config = { cmd = { 'cmake-language-server' }, filetypes = { 'cmake' }, root_dir = function(fname) return util.root_pattern('CMakePresets.json', 'CTestConfig.cmake', '.git', 'build', 'cmake')(fname) end, single_file_support = true, init_options = { buildDirectory = 'build', }, }, docs = { description = [[ https://github.com/regen100/cmake-language-server CMake LSP Implementation ]], }, }