local M = {} function M.setup() local on_attach = function(client, bufnr) vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") client.resolved_capabilities.document_formatting = false client.resolved_capabilities.document_range_formatting = false local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, "n", ...) end local opts = { noremap = true, silent = true } buf_set_keymap("K", "lua vim.lsp.buf.hover()", opts) buf_set_keymap("gd", "lua vim.lsp.buf.definition()", opts) buf_set_keymap("gD", "lua vim.lsp.buf.declaration()", opts) buf_set_keymap("gr", "lua vim.lsp.buf.references()", opts) buf_set_keymap("gI", "lua vim.lsp.buf.implementation()", opts) buf_set_keymap("gs", "lua vim.lsp.buf.signature_help()", opts) buf_set_keymap("gl", "lua vim.lsp.diagnostic.show_line_diagnostics()", opts) buf_set_keymap("la", "Telescope lsp_code_actions", opts) buf_set_keymap("ld", "TroubleToggle", opts) buf_set_keymap("lr", "lua vim.lsp.buf.rename()", opts) buf_set_keymap("lf", "lua vim.lsp.buf.formatting()", opts) buf_set_keymap("ls", "Telescope lsp_document_symbols", opts) buf_set_keymap("li", "LspInfo", opts) buf_set_keymap("lR", "LspRestart", opts) end require("nvim-lsp-installer").on_server_ready(function(server) local opts = { on_attach = on_attach } if server.name == "jsonls" then opts = vim.tbl_deep_extend("force", opts, require "lsp.providers.jsonls" or {}) elseif server.name == "yamlls" then opts = vim.tbl_deep_extend("force", opts, require "lsp.providers.yamlls" or {}) elseif server.name == "tsserver" then opts = vim.tbl_deep_extend("force", opts, require "lsp.providers.tsserver" or {}) elseif server.name == "sumneko_lua" then opts = vim.tbl_deep_extend("force", opts, require "lsp.providers.sumneko_lua" or {}) elseif server.name == "pyright" then opts = vim.tbl_deep_extend("force", opts, require "lsp.providers.pyright" or {}) end server:setup(opts) require("lsp.null-ls").setup() require("lspconfig")["null-ls"].setup {} vim.cmd [[ do User LspAttachBuffers ]] end) end return M