aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/handlers.lua
diff options
context:
space:
mode:
authorJon Huhn <nojnhuh@users.noreply.github.com>2023-03-05 00:52:27 -0600
committerGitHub <noreply@github.com>2023-03-05 07:52:27 +0100
commitac69ba5fa0081026f2c5e6e29d5788802479b7b9 (patch)
treef78cce287bc020646410eaa57a9565647e2cba03 /runtime/lua/vim/lsp/handlers.lua
parent419819b6245e120aba8897e3ddea711b2cd0246c (diff)
downloadrneovim-ac69ba5fa0081026f2c5e6e29d5788802479b7b9.tar.gz
rneovim-ac69ba5fa0081026f2c5e6e29d5788802479b7b9.tar.bz2
rneovim-ac69ba5fa0081026f2c5e6e29d5788802479b7b9.zip
feat(lsp): implement workspace/didChangeWatchedFiles (#22405)
Diffstat (limited to 'runtime/lua/vim/lsp/handlers.lua')
-rw-r--r--runtime/lua/vim/lsp/handlers.lua38
1 files changed, 29 insertions, 9 deletions
diff --git a/runtime/lua/vim/lsp/handlers.lua b/runtime/lua/vim/lsp/handlers.lua
index 5096100a60..ee5b63d260 100644
--- a/runtime/lua/vim/lsp/handlers.lua
+++ b/runtime/lua/vim/lsp/handlers.lua
@@ -117,15 +117,35 @@ M['window/showMessageRequest'] = function(_, result)
end
--see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#client_registerCapability
-M['client/registerCapability'] = function(_, _, ctx)
- local client_id = ctx.client_id
- local warning_tpl = 'The language server %s triggers a registerCapability '
- .. 'handler despite dynamicRegistration set to false. '
- .. 'Report upstream, this warning is harmless'
- local client = vim.lsp.get_client_by_id(client_id)
- local client_name = client and client.name or string.format('id=%d', client_id)
- local warning = string.format(warning_tpl, client_name)
- log.warn(warning)
+M['client/registerCapability'] = function(_, result, ctx)
+ local log_unsupported = false
+ for _, reg in ipairs(result.registrations) do
+ if reg.method == 'workspace/didChangeWatchedFiles' then
+ require('vim.lsp._watchfiles').register(reg, ctx)
+ else
+ log_unsupported = true
+ end
+ end
+ if log_unsupported then
+ local client_id = ctx.client_id
+ local warning_tpl = 'The language server %s triggers a registerCapability '
+ .. 'handler despite dynamicRegistration set to false. '
+ .. 'Report upstream, this warning is harmless'
+ local client = vim.lsp.get_client_by_id(client_id)
+ local client_name = client and client.name or string.format('id=%d', client_id)
+ local warning = string.format(warning_tpl, client_name)
+ log.warn(warning)
+ end
+ return vim.NIL
+end
+
+--see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#client_unregisterCapability
+M['client/unregisterCapability'] = function(_, result, ctx)
+ for _, unreg in ipairs(result.unregisterations) do
+ if unreg.method == 'workspace/didChangeWatchedFiles' then
+ require('vim.lsp._watchfiles').unregister(unreg, ctx)
+ end
+ end
return vim.NIL
end