diff --git a/plugin/on-attach.lua b/plugin/on-attach.lua index cbf9e97..73da198 100644 --- a/plugin/on-attach.lua +++ b/plugin/on-attach.lua @@ -1,6 +1,13 @@ local on_attach = function(args) - --Enable completion triggered by - vim.bo[args.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + local client = vim.lsp.get_client_by_id(args.data.client_id) + if client.server_capabilities.completionProvider then + --Enable completion triggered by + vim.bo[args.buf].omnifunc = "v:lua.vim.lsp.omnifunc" + end + if client.server_capabilities.definitionProvider then + vim.bo[args.buf].tagfunc = "v:lua.vim.lsp.tagfunc" + end + -- -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions @@ -34,8 +41,16 @@ local on_attach = function(args) vim.keymap.set("n", "dr", function() require("dap").repl.toggle() end, { silent = true, desc = "Toogle debug REPL" }) - vim.cmd [[autocmd CursorHoldI * silent! lua vim.lsp.buf.signature_help()]] - vim.cmd [[autocmd CursorHold * lua vim.diagnostic.open_float({max_width = 100, focusable = false})]] + if client.server_capabilities.signatureHelpProvider then + vim.cmd [[autocmd CursorHoldI * silent! lua vim.lsp.buf.signature_help()]] + vim.cmd [[autocmd CursorHold * lua vim.diagnostic.open_float({max_width = 100, focusable = false})]] + end + + if client.server_capabilities.documentHighlightingProvider then + vim.cmd([[autocmd CursorHold lua vim.lsp.buf.document_highlight()]]) + vim.cmd([[autocmd CursorHoldI lua vim.lsp.buf.document_highlight()]]) + vim.cmd([[autocmd CursorMoved lua vim.lsp.buf.clear_references()]]) + end end vim.api.nvim_create_autocmd("LspAttach", { callback = on_attach })