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) capabilities.offsetEncoding = { "utf-8", "utf-16" } local util = require 'lspconfig.util' return { default_config = { cmd = { 'mdx-language-server', '--stdio' }, filetypes = { 'mdx', 'markdown', 'svx' }, root_dir = util.root_pattern 'package.json', single_file_support = true, settings = {}, init_options = { typescript = {}, }, on_new_config = function(new_config, new_root_dir) if vim.tbl_get(new_config.init_options, 'typescript') and not new_config.init_options.typescript.tsdk then new_config.init_options.typescript.tsdk = util.get_typescript_server_path(new_root_dir) end end, }, commands = {}, docs = { description = [[ https://github.com/mdx-js/mdx-analyzer `mdx-analyzer`, a language server for MDX ]], }, }