diff options
| author | Christian Clason <christian.clason@uni-due.de> | 2021-09-10 10:10:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-10 01:10:18 -0700 |
| commit | 38e489a12e991e0dd762de1adac976920fb438b5 (patch) | |
| tree | 627e8d3901b08a5059b4f7422b205ff12fb7b097 /lua | |
| parent | [docgen] Update CONFIG.md (diff) | |
| download | nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.tar nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.tar.gz nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.tar.bz2 nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.tar.lz nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.tar.xz nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.tar.zst nvim-lspconfig-38e489a12e991e0dd762de1adac976920fb438b5.zip | |
fix: add compat shim for handler change in core (#1248)
Add a compatibility shim to `util.lua` adapting to change in handler signature
and use it where needed.
(Skip `rust-analyzer` and `denols` since their requests don't use handlers.)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/lspconfig/clangd.lua | 25 | ||||
| -rw-r--r-- | lua/lspconfig/rust_analyzer.lua | 3 | ||||
| -rw-r--r-- | lua/lspconfig/texlab.lua | 61 | ||||
| -rw-r--r-- | lua/lspconfig/util.lua | 21 |
4 files changed, 62 insertions, 48 deletions
diff --git a/lua/lspconfig/clangd.lua b/lua/lspconfig/clangd.lua index 22c89e52..e8876af6 100644 --- a/lua/lspconfig/clangd.lua +++ b/lua/lspconfig/clangd.lua @@ -5,16 +5,21 @@ local util = require 'lspconfig/util' local function switch_source_header(bufnr) bufnr = util.validate_bufnr(bufnr) local params = { uri = vim.uri_from_bufnr(bufnr) } - vim.lsp.buf_request(bufnr, 'textDocument/switchSourceHeader', params, function(err, _, result) - if err then - error(tostring(err)) - end - if not result then - print 'Corresponding file cannot be determined' - return - end - vim.api.nvim_command('edit ' .. vim.uri_to_fname(result)) - end) + vim.lsp.buf_request( + bufnr, + 'textDocument/switchSourceHeader', + params, + util.compat_handler(function(err, result) + if err then + error(tostring(err)) + end + if not result then + print 'Corresponding file cannot be determined' + return + end + vim.api.nvim_command('edit ' .. vim.uri_to_fname(result)) + end) + ) end local root_pattern = util.root_pattern('compile_commands.json', 'compile_flags.txt', '.git') diff --git a/lua/lspconfig/rust_analyzer.lua b/lua/lspconfig/rust_analyzer.lua index 1f47dc2b..bbe86b3d 100644 --- a/lua/lspconfig/rust_analyzer.lua +++ b/lua/lspconfig/rust_analyzer.lua @@ -1,10 +1,9 @@ local configs = require 'lspconfig/configs' local util = require 'lspconfig/util' -local lsp = vim.lsp local function reload_workspace(bufnr) bufnr = util.validate_bufnr(bufnr) - lsp.buf_request(bufnr, 'rust-analyzer/reloadWorkspace', nil, function(err, _, result, _) + vim.lsp.buf_request(bufnr, 'rust-analyzer/reloadWorkspace', nil, function(err) if err then error(tostring(err)) end diff --git a/lua/lspconfig/texlab.lua b/lua/lspconfig/texlab.lua index f1e21ea3..232773bc 100644 --- a/lua/lspconfig/texlab.lua +++ b/lua/lspconfig/texlab.lua @@ -16,38 +16,22 @@ local texlab_forward_status = vim.tbl_add_reverse_lookup { Unconfigured = 3, } --- add compatibility shim for breaking signature change -local function mk_handler(fn) - return function(...) - local config_or_client_id = select(4, ...) - local is_new = type(config_or_client_id) ~= 'number' - if is_new then - return fn(...) - else - local err = select(1, ...) - local method = select(2, ...) - local result = select(3, ...) - local client_id = select(4, ...) - local bufnr = select(5, ...) - local config = select(6, ...) - return fn(err, result, { method = method, client_id = client_id, bufnr = bufnr }, config) - end - end -end - -local function request(bufnr, method, params, handler) - return lsp.buf_request(bufnr, method, params, mk_handler(handler)) -end - local function buf_build(bufnr) bufnr = util.validate_bufnr(bufnr) - local params = { textDocument = { uri = vim.uri_from_bufnr(bufnr) } } - request(bufnr, 'textDocument/build', params, function(err, result, _) - if err then - error(tostring(err)) - end - print('Build ' .. texlab_build_status[result.status]) - end) + local params = { + textDocument = { uri = vim.uri_from_bufnr(bufnr) }, + } + lsp.buf_request( + bufnr, + 'textDocument/build', + params, + util.compat_handler(function(err, result) + if err then + error(tostring(err)) + end + print('Build ' .. texlab_build_status[result.status]) + end) + ) end local function buf_search(bufnr) @@ -56,12 +40,17 @@ local function buf_search(bufnr) textDocument = { uri = vim.uri_from_bufnr(bufnr) }, position = { line = vim.fn.line '.' - 1, character = vim.fn.col '.' }, } - request(bufnr, 'textDocument/forwardSearch', params, function(err, result, _) - if err then - error(tostring(err)) - end - print('Search ' .. texlab_forward_status[result.status]) - end) + lsp.buf_request( + bufnr, + 'textDocument/forwardSearch', + params, + util.compat_handler(function(err, result) + if err then + error(tostring(err)) + end + print('Search ' .. texlab_forward_status[result.status]) + end) + ) end -- bufnr isn't actually required here, but we need a valid buffer in order to diff --git a/lua/lspconfig/util.lua b/lua/lspconfig/util.lua index 50791462..6e0f7f41 100644 --- a/lua/lspconfig/util.lua +++ b/lua/lspconfig/util.lua @@ -19,6 +19,27 @@ M.default_config = { -- global on_setup hook M.on_setup = nil +-- add compatibility shim for breaking signature change +-- from https://github.com/mfussenegger/nvim-lsp-compl/ +-- TODO: remove after Neovim release +function M.compat_handler(handler) + return function(...) + local config_or_client_id = select(4, ...) + local is_new = type(config_or_client_id) ~= 'number' + if is_new then + return handler(...) + else + local err = select(1, ...) + local method = select(2, ...) + local result = select(3, ...) + local client_id = select(4, ...) + local bufnr = select(5, ...) + local config = select(6, ...) + return handler(err, result, { method = method, client_id = client_id, bufnr = bufnr }, config) + end + end +end + function M.validate_bufnr(bufnr) validate { bufnr = { bufnr, 'n' }, |
