vim.lsp.handlers["textDocument/codeAction"] = require "lsputil.codeAction".code_action_handler vim.lsp.handlers["textDocument/references"] = require "lsputil.locations".references_handler vim.lsp.handlers["textDocument/definition"] = require "lsputil.locations".definition_handler vim.lsp.handlers["textDocument/declaration"] = require "lsputil.locations".declaration_handler vim.lsp.handlers["textDocument/typeDefinition"] = require "lsputil.locations".typeDefinition_handler vim.lsp.handlers["textDocument/implementation"] = require "lsputil.locations".implementation_handler vim.lsp.handlers["textDocument/documentSymbol"] = require "lsputil.symbols".document_handler vim.lsp.handlers["workspace/symbol"] = require "lsputil.symbols".workspace_handler local signError = vim.fn.sign_getdefined("DiagnosticSignError") signError["text"] = "" signError["texthl"] = "DiagnosticSignError" vim.fn.sign_define("DiagnosticSignError", signError) local signWarn = vim.fn.sign_getdefined("DiagnosticSignWarn") signWarn["text"] = "" signWarn["texthl"] = "DiagnosticSignWarn" vim.fn.sign_define("DiagnosticSignWarn", signWarn) local signHint = vim.fn.sign_getdefined("DiagnosticSignHint") signHint["text"] = "" signHint["texthl"] = "DiagnosticSignHint" vim.fn.sign_define("DiagnosticSignHint", signHint) vim.fn.sign_define("DiagnosticSignInfo", signHint) --- Completion Icons require("lspkind").init({}) --- Languages require "lspconfig".bashls.setup {} require "lspconfig".ccls.setup {} require "lspconfig".clangd.setup {} require "lspconfig".cssls.setup {} require "lspconfig".html.setup {} require "lspconfig".pyright.setup {} require "lspconfig".tsserver.setup {} require "lspconfig".vimls.setup {} require "lspconfig".yamlls.setup {} require "lspconfig".texlab.setup {} --- ESLINT local eslint = { lintCommand = "eslint_d -f visualstudio --stdin --stdin-filename ${INPUT}", lintIgnoreExitCode = true, lintStdin = true, lintFormats = { "%f(%l,%c): %tarning %m", "%f(%l,%c): %rror %m" } } --- ESLINT Actions require("null-ls").config {} require("lspconfig")["null-ls"].setup {} require "lspconfig".efm.setup { init_options = {documentFormatting = true}, filetypes = {"javascript", "typescript", "javascriptreact", "typescriptreact"}, init_options = {documentFormatting = true}, settings = { rootMarkers = {".eslintrc.js", ".git/"}, languages = { javascript = {eslint}, typescript = {eslint}, typescriptreact = {eslint}, javascriptreact = {eslint} } } } --- Keybindings local nvim_lsp = require("lspconfig") local on_attach = function(client, bufnr) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end -- Mappings. local opts = {noremap = true, silent = true} buf_set_keymap("n", "gD", "lua vim.lsp.buf.declaration()", opts) buf_set_keymap("n", "gd", "lua vim.lsp.buf.definition()", opts) buf_set_keymap("n", "K", "lua vim.lsp.buf.hover()", opts) buf_set_keymap("n", "gi", "lua vim.lsp.buf.implementation()", opts) buf_set_keymap("n", "", "lua vim.lsp.buf.signature_help()", opts) buf_set_keymap("n", "wa", "lua vim.lsp.buf.add_workspace_folder()", opts) buf_set_keymap("n", "wr", "lua vim.lsp.buf.remove_workspace_folder()", opts) buf_set_keymap("n", "wl", "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", opts) -- buf_set_keymap("n", "t", "lua vim.lsp.buf.type_definition()", opts) buf_set_keymap("n", "", "lua vim.lsp.buf.rename()", opts) buf_set_keymap("n", "a", "lua vim.lsp.buf.code_action()", opts) buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) buf_set_keymap("n", "d", "lua vim.lsp.diagnostic.show_line_diagnostics()", opts) buf_set_keymap("n", "[d", "lua vim.lsp.diagnostic.goto_prev()", opts) buf_set_keymap("n", "]d", "lua vim.lsp.diagnostic.goto_next()", opts) buf_set_keymap("n", "q", "lua vim.lsp.diagnostic.set_loclist()", opts) end require "lspconfig".jsonls.setup { on_attach = on_attach, flags = { debounce_text_changes = 150 }, settings = { json = require "json-schema" } } require "lspconfig".tsserver.setup { on_attach = function(client, bufnr) local ts_utils = require("nvim-lsp-ts-utils") ts_utils.setup { eslint_bin = "eslint_d", eslint_enable_diagnostics = false } ts_utils.setup_client(client) on_attach(client, bufnr) end, flags = { debounce_text_changes = 150 } } --[[ require "lspconfig".java_language_server.setup { on_attach = on_attach, cmd = {"java-language-server"} } ]] local servers = {"pyright", "bashls", "clangd", "cssls", "texlab"} for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, flags = { debounce_text_changes = 150 } } end