local nvim_lsp = require("lspconfig") -- -- https://vonheikemen.github.io/devlog/tools/setup-nvim-lspconfig-plus-nvim-cmp/ local lsp_defaults = nvim_lsp.util.default_config lsp_defaults.capabilities = vim.tbl_deep_extend( 'force', lsp_defaults.capabilities, require("cmp_nvim_lsp").default_capabilities() ) vim.api.nvim_create_autocmd("LspAttach", { desc = "LSP actions", callback = function() local bufmap = function(mode, lhs, rhs) local opts = { buffer = true } vim.keymap.set(mode, lhs, rhs, opts) end -- Displays hover information about the symbol under the cursor bufmap('n', 'K', 'lua vim.lsp.buf.hover()') -- Jump to the definition bufmap('n', 'gd', 'lua vim.lsp.buf.definition()') -- Jump to declaration bufmap('n', 'gD', 'lua vim.lsp.buf.declaration()') -- Lists all the implementations for the symbol under the cursor bufmap('n', 'gi', 'lua vim.lsp.buf.implementation()') -- Jumps to the definition of the type symbol bufmap('n', 'go', 'lua vim.lsp.buf.type_definition()') -- Lists all the references bufmap('n', 'gr', 'lua vim.lsp.buf.references()') -- Displays a function's signature information bufmap('n', '', 'lua vim.lsp.buf.signature_help()') -- Renames all references to the symbol under the cursor bufmap('n', '', 'lua vim.lsp.buf.rename()') -- Selects a code action available at the current cursor position bufmap('n', '', 'lua vim.lsp.buf.code_action()') bufmap('x', '', 'lua vim.lsp.buf.range_code_action()') -- Show diagnostics in a floating window bufmap('n', 'gl', 'lua vim.diagnostic.open_float()') -- Move to the previous diagnostic bufmap('n', '[a', 'lua vim.diagnostic.goto_prev()') -- Move to the next diagnostic bufmap('n', ']a', 'lua vim.diagnostic.goto_next()') end }) vim.api.nvim_create_autocmd("BufWritePre", { callback = function() vim.lsp.buf.format() end }) nvim_lsp.diagnosticls.setup { filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'css', 'scss', 'markdown', 'pandoc', 'prisma' }, init_options = { linters = { eslint = { command = 'eslint', rootPatterns = { '.git' }, debounce = 100, args = { '--stdin', '--stdin-filename', '%filepath', '--format', 'json' }, sourceName = 'eslint', parseJson = { errorsRoot = '[0].messages', line = 'line', column = 'column', endLine = 'endLine', endColumn = 'endColumn', message = '[eslint] ${message} [${ruleId}]', security = 'severity' }, securities = { [1] = 'error', [2] = 'warning' } }, markdownlint = { command = 'markdownlint', rootPatterns = { '.git' }, isStderr = true, debounce = 100, args = { '--stdin' }, offsetLine = 0, offsetColumn = 0, sourceName = 'markdownlint', securities = { undefined = 'hint' }, formatLines = 1, formatPattern = { '^.*:(\\d+)\\s+(.*)$', { line = 1, column = -1, message = 2, } } } }, filetypes = { javascript = 'eslint', javascriptreact = 'eslint', typescript = 'eslint', typescriptreact = 'eslint', markdown = 'markdownlint', pandoc = 'markdownlint' }, formatters = { prettier = { command = 'prettier', args = { '--stdin-filepath', '%filename' } } }, formatFiletypes = { css = 'prettier', javascript = 'prettier', javascriptreact = 'prettier', json = 'prettier', scss = 'prettier', typescript = 'prettier', typescriptreact = 'prettier', markdown = 'prettier', -- This implies that you have installed a prisma-supporting plugin for -- prettier. You could instead configure this formatter to be `npx prisma format` -- directly, but that command doesn't seem to output in the way this -- diagnostic server expects. prisma = 'prettier' } } } nvim_lsp.elmls.setup { } local capabilitiesWithoutFomatting = vim.lsp.protocol.make_client_capabilities() capabilitiesWithoutFomatting.textDocument.formatting = false capabilitiesWithoutFomatting.textDocument.rangeFormatting = false capabilitiesWithoutFomatting.textDocument.range_formatting = false nvim_lsp.tsserver.setup { init_options = { hostInfo = "neovim", maxTsServerMemory = "8192", preferences = { quotePreference = "single", allowIncompleteCompletions = false }, capabilities = capabilitiesWithoutFomatting } } nvim_lsp.elixirls.setup { cmd = { "elixir-ls" }, } nvim_lsp.rnix.setup { cmd = { "@rnix_lsp@/bin/rnix-lsp" }, } nvim_lsp.rust_analyzer.setup {} nvim_lsp.lua_ls.setup { cmd = { "@lua_ls@/bin/lua-language-server" }, single_file_support = true, flags = { debounce_text_changes = 150, }, settings = { Lua = { diagnostics = { globals = { 'vim' } } } }, } nvim_lsp.texlab.setup {}