diff --git a/nvim/after/plugin/whichkey.lua b/nvim/after/plugin/whichkey.lua index cdf738f..318a9bf 100644 --- a/nvim/after/plugin/whichkey.lua +++ b/nvim/after/plugin/whichkey.lua @@ -116,14 +116,14 @@ local mappings = { }, L = { name = "LSP", - c = { "vim.lsp.buf.code_action()", "Code Action" }, - f = { "vim.lsp.buf.formatting()", "Formatting" }, - l = { "vim.diagnostic.setloclist", "Set Loclist" }, - r = { "vim.lsp.buf.rename()", "Rename" }, - t = { "vim.lsp.buf.type_definition()", "Type Definition" }, + c = { "lua vim.lsp.buf.code_action()", "Code Action" }, + f = { "lua vim.lsp.buf.format()", "Formatting" }, + l = { "lua vim.diagnostic.setloclist", "Set Loclist" }, + r = { "lua vim.lsp.buf.rename()", "Rename" }, + t = { "lua vim.lsp.buf.type_definition()", "Type Definition" }, w = { "function() print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", "List Workspace Folder" }, - a = { "vim.lsp.buf.add_workspace_folder()", "Add Workspace" }, - v = { "vim.lsp.buf.remove_workspace_folder()", "Remove Workspace" }, + a = { "lua vim.lsp.buf.add_workspace_folder()", "Add Workspace" }, + v = { "lua vim.lsp.buf.remove_workspace_folder()", "Remove Workspace" }, }, P = { name = "Packer", diff --git a/nvim/lua/kogakure/autocommands.lua b/nvim/lua/kogakure/autocommands.lua index a5ebd5f..8a58b30 100644 --- a/nvim/lua/kogakure/autocommands.lua +++ b/nvim/lua/kogakure/autocommands.lua @@ -109,6 +109,6 @@ vim.cmd([[ augroup _lsp autocmd! - autocmd BufWritePre * lua vim.lsp.buf.formatting() + autocmd BufWritePre * lua vim.lsp.buf.format() augroup end ]]) diff --git a/nvim/lua/kogakure/keymaps.lua b/nvim/lua/kogakure/keymaps.lua index ec335f3..2c39d01 100644 --- a/nvim/lua/kogakure/keymaps.lua +++ b/nvim/lua/kogakure/keymaps.lua @@ -147,4 +147,4 @@ keymap("o", "al", ":normal! $v0", opts) keymap("x", "al", ":normal! $v0", opts) -- LSP formatting -keymap("n", "o", "lua vim.lsp.buf.formatting_sync()", opts) +keymap("n", "o", "lua vim.lsp.buf.format()", opts) diff --git a/nvim/lua/kogakure/lsp/handlers.lua b/nvim/lua/kogakure/lsp/handlers.lua index 8a1f69f..692b55e 100644 --- a/nvim/lua/kogakure/lsp/handlers.lua +++ b/nvim/lua/kogakure/lsp/handlers.lua @@ -41,19 +41,23 @@ M.setup = function() }) end -local function lsp_highlight_document(client) +local function lsp_highlight_document(client, bufnr) -- Set autocommands conditional on server_capabilities - if client.resolved_capabilities.document_highlight then - vim.api.nvim_exec( - [[ - augroup lsp_document_highlight - autocmd! * - autocmd CursorHold lua vim.lsp.buf.document_highlight() - autocmd CursorMoved lua vim.lsp.buf.clear_references() - augroup END - ]], - false - ) + if client.server_capabilities.documentHighlightProvider then + vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true }) + vim.api.nvim_clear_autocmds({ buffer = bufnr, group = "lsp_document_highlight" }) + vim.api.nvim_create_autocmd("CursorHold", { + callback = vim.lsp.buf.document_highlight, + buffer = bufnr, + group = "lsp_document_highlight", + desc = "Document Highlight", + }) + vim.api.nvim_create_autocmd("CursorMoved", { + callback = vim.lsp.buf.clear_references, + buffer = bufnr, + group = "lsp_document_highlight", + desc = "Clear All the References", + }) end end @@ -76,11 +80,9 @@ local function lsp_keymaps(bufnr) keymap(bufnr, "n", "รค", "lua vim.diagnostic.goto_next()", opts) end --- TODO: Neovim 0.8 https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Avoiding-LSP-formatting-conflicts -- https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save local lsp_formatting = function(bufnr) - -- vim.lsp.buf.format({}) - vim.lsp.buf.formatting_sync({ + vim.lsp.buf.format({ bufnr = bufnr, filter = function(client) return client.name == "null-ls" @@ -105,47 +107,47 @@ M.on_attach = function(client, bufnr) -- TypeScript if client.name == "tsserver" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end -- HTML if client.name == "html" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end -- Stylelint if client.name == "stylelint_lsp" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end -- JSON if client.name == "jsonls" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end -- Lua if client.name == "sumneko_lua" then - client.resolved_capabilities.document_formatting = false - client.resolved_capabilities.document_range_formatting = false + client.server_capabilities.documentFormattingProvider = false + client.server_capabilities.documentRangeFormattingProvider = false end -- Rust if client.name == "rust_analyzer" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end -- Astro if client.name == "astro" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end -- Diagnostic if client.name == "diagnosticls" then - client.resolved_capabilities.document_formatting = false + client.server_capabilities.documentFormattingProvider = false end lsp_keymaps(bufnr) - lsp_highlight_document(client) + lsp_highlight_document(client, bufnr) end local capabilities = vim.lsp.protocol.make_client_capabilities()