local M = {} function M.map(mode, lhs, rhs, opts) local default_opts = { noremap = true } if opts then default_opts = vim.tbl_extend("force", default_opts, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, default_opts) end function M.lsp_config_defaults() return { root_dir = require("lspconfig.util").root_pattern( "manage.py", "pyproject.toml", "package.json", ".null-ls-root", "Makefile", ".git" ), 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 ---- Disables document formatting by lsp --client.resolved_capabilities.document_formatting = false --client.resolved_capabilities.document_range_formatting = false -- Enable completion triggered by buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") -- Mappings. local opts = { noremap = true, silent = true } -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap("n", "", "lua vim.lsp.buf.signature_help()", opts) buf_set_keymap("n", "D", "lua vim.lsp.buf.type_definition()", opts) buf_set_keymap("n", "ca", "lua vim.lsp.buf.code_action()", opts) buf_set_keymap("n", "e", "lua vim.diagnostic.open_float()", opts) buf_set_keymap("n", "q", "lua vim.diagnostic.setloclist()", opts) buf_set_keymap("n", "rn", "lua vim.lsp.buf.rename()", opts) buf_set_keymap("n", "wa", "lua vim.lsp.buf.add_workspace_folder()", opts) buf_set_keymap( "n", "wl", "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", opts ) buf_set_keymap("n", "wr", "lua vim.lsp.buf.remove_workspace_folder()", opts) buf_set_keymap("n", "K", "lua vim.lsp.buf.hover()", opts) buf_set_keymap("n", "[d", "lua vim.diagnostic.goto_prev({wrap = true})", opts) buf_set_keymap("n", "]d", "lua vim.diagnostic.goto_next({wrap = true})", opts) 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", "gi", "lua vim.lsp.buf.implementation()", opts) buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) local version = vim.version() if version.api_level == 9 then buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) else buf_set_keymap("n", "f", "lua vim.lsp.buf.format({ async = true })", opts) end end, } end return M