diff --git a/nvim/m-housh/lua/user/plugin/lsp.lua b/nvim/m-housh/lua/user/plugin/lsp.lua index 64184d9..0e57bec 100755 --- a/nvim/m-housh/lua/user/plugin/lsp.lua +++ b/nvim/m-housh/lua/user/plugin/lsp.lua @@ -44,51 +44,84 @@ return { require("mason").setup() require("mason-lspconfig").setup() local nvim_lsp = require("lspconfig") + local telescope_builtin = require('telescope.builtin') + + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('my-lsp-attach', { clear = true }), + callback = function(event) + local map = function(keys, func, desc) + vim.keymap.set('n', keys, func, { buffer = true, desc = 'LSP: ' .. desc }) + end + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + map('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + map('gd', telescope_builtin.lsp_definitions, '[G]oto [D]efinition') + map('gi', telescope_builtin.lsp_implementations, '[G]oto, [I]mplementation') + map('gr', telescope_builtin.lsp_references, '[G]oto [R]eferences') + map('gt', telescope_builtin.lsp_type_definitions, '[T]ype Definitions') + map('K', vim.lsp.buf.hover, 'Hover Documentation') +-- -- 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", "D", +-- "lua vim.lsp.buf.type_definition()", opts) +-- buf_set_keymap("n", "rn", "lua vim.lsp.buf.rename()", opts) +-- opts) +-- buf_set_keymap("n", "e", "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) +-- buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) + vim.api.nvim_buf_set_option(event.buf, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + end, + }) -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer - local on_attach = function(bufnr) - local function buf_set_keymap(...) - vim.api.nvim_buf_set_keymap(bufnr, ...) - end - - -- Mappings. - local opts = {noremap = true, silent = true} - - -- See `:help vim.lsp.*` for documentation on any of the below functions - 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", "gT", vim.lsp.buf.type_definition, 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", "D", - "lua vim.lsp.buf.type_definition()", opts) - buf_set_keymap("n", "rn", "lua vim.lsp.buf.rename()", opts) - buf_set_keymap("n", "ca", "lua vim.lsp.buf.code_action()", - opts) - buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) - buf_set_keymap("n", "e", "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) - buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) - - vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - end +-- local on_attach = function(_, bufnr) +-- local function buf_set_keymap(...) +-- vim.api.nvim_buf_set_keymap(bufnr, ...) +-- end +-- -- Mappings. +-- local opts = {noremap = true, silent = true} +-- -- See `:help vim.lsp.*` for documentation on any of the below functions +-- 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", "gT", vim.lsp.buf.type_definition, 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", "D", +-- "lua vim.lsp.buf.type_definition()", opts) +-- buf_set_keymap("n", "rn", "lua vim.lsp.buf.rename()", opts) +-- buf_set_keymap("n", "ca", "lua vim.lsp.buf.code_action()", +-- opts) +-- buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) +-- buf_set_keymap("n", "e", "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) +-- buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) +-- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') +-- end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches - --local capabilities = vim.lsp.protocol.make_client_capabilities() - local capabilities = require("cmp_nvim_lsp").default_capabilities() + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) local servers = { "bashls", @@ -105,9 +138,10 @@ return { "texlab", "yamlls", } + for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { - on_attach = on_attach, + --on_attach = on_attach, capabilities = capabilities, settings = { gopls = {