aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorChristian Clason <christian.clason@uni-due.de>2021-09-10 10:10:18 +0200
committerGitHub <noreply@github.com>2021-09-10 01:10:18 -0700
commit38e489a12e991e0dd762de1adac976920fb438b5 (patch)
tree627e8d3901b08a5059b4f7422b205ff12fb7b097 /lua
parent[docgen] Update CONFIG.md (diff)
downloadnvim-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.lua25
-rw-r--r--lua/lspconfig/rust_analyzer.lua3
-rw-r--r--lua/lspconfig/texlab.lua61
-rw-r--r--lua/lspconfig/util.lua21
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' },