aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Fussenegger <f.mathias@zignar.net>2022-08-23 22:39:34 +0200
committerMathias Fussenegger <f.mathias@zignar.net>2022-08-28 14:07:53 +0200
commit7d3e4aee6a11f0bd4c53b0dcb18a496b5fdd32b2 (patch)
tree57f703c3d3bdba898f24a5eab22bf626fbbfca04
parentf9641d1ac6bae58a42572ce3bfa34d62d5f22619 (diff)
downloadrneovim-7d3e4aee6a11f0bd4c53b0dcb18a496b5fdd32b2.tar.gz
rneovim-7d3e4aee6a11f0bd4c53b0dcb18a496b5fdd32b2.tar.bz2
rneovim-7d3e4aee6a11f0bd4c53b0dcb18a496b5fdd32b2.zip
refactor(lsp): encapsulate rpc uv handle
To prepare for different transports like TCP where the handle won't have a kill method.
-rw-r--r--runtime/doc/lsp.txt5
-rw-r--r--runtime/lua/vim/lsp.lua11
-rw-r--r--runtime/lua/vim/lsp/rpc.lua12
3 files changed, 16 insertions, 12 deletions
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt
index 9235fdef34..9661a43e4c 100644
--- a/runtime/doc/lsp.txt
+++ b/runtime/doc/lsp.txt
@@ -1904,7 +1904,7 @@ notify({method}, {params}) *vim.lsp.rpc.notify()*
Parameters: ~
{method} (string) The invoked LSP method
- {params} (table): Parameters for the invoked LSP method
+ {params} (table|nil): Parameters for the invoked LSP method
Return: ~
(bool) `true` if notification could be sent, `false` if not
@@ -1915,7 +1915,8 @@ request({method}, {params}, {callback}, {notify_reply_callback})
Parameters: ~
{method} (string) The invoked LSP method
- {params} (table) Parameters for the invoked LSP method
+ {params} (table|nil) Parameters for the invoked LSP
+ method
{callback} (function) Callback to invoke
{notify_reply_callback} (function|nil) Callback to invoke as soon as
a request is no longer pending
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index fd64c1a495..5986f5a5e8 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -1464,14 +1464,13 @@ function lsp.start_client(config)
--- you request to stop a client which has previously been requested to
--- shutdown, it will automatically escalate and force shutdown.
---
- ---@param force (bool, optional)
+ ---@param force boolean|nil
function client.stop(force)
- local handle = rpc.handle
- if handle:is_closing() then
+ if rpc.is_closing() then
return
end
if force or not client.initialized or graceful_shutdown_failed then
- handle:kill(15)
+ rpc.terminate()
return
end
-- Sending a signal after a process has exited is acceptable.
@@ -1480,7 +1479,7 @@ function lsp.start_client(config)
rpc.notify('exit')
else
-- If there was an error in the shutdown request, then term to be safe.
- handle:kill(15)
+ rpc.terminate()
graceful_shutdown_failed = true
end
end)
@@ -1492,7 +1491,7 @@ function lsp.start_client(config)
---@returns (bool) true if client is stopped or in the process of being
---stopped; false otherwise
function client.is_stopped()
- return rpc.handle:is_closing()
+ return rpc.is_closing()
end
---@private
diff --git a/runtime/lua/vim/lsp/rpc.lua b/runtime/lua/vim/lsp/rpc.lua
index f96321c845..1fbfd3c8e1 100644
--- a/runtime/lua/vim/lsp/rpc.lua
+++ b/runtime/lua/vim/lsp/rpc.lua
@@ -405,7 +405,7 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params)
--
--- Sends a notification to the LSP server.
---@param method (string) The invoked LSP method
- ---@param params (table): Parameters for the invoked LSP method
+ ---@param params (table|nil): Parameters for the invoked LSP method
---@returns (bool) `true` if notification could be sent, `false` if not
local function notify(method, params)
return encode_and_send({
@@ -432,7 +432,7 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params)
--- Sends a request to the LSP server and runs {callback} upon response.
---
---@param method (string) The invoked LSP method
- ---@param params (table) Parameters for the invoked LSP method
+ ---@param params (table|nil) Parameters for the invoked LSP method
---@param callback (function) Callback to invoke
---@param notify_reply_callback (function|nil) Callback to invoke as soon as a request is no longer pending
---@returns (bool, number) `(true, message_id)` if request could be sent, `false` if not
@@ -626,8 +626,12 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params)
end))
return {
- pid = pid,
- handle = handle,
+ is_closing = function()
+ return handle:is_closing()
+ end,
+ terminate = function()
+ handle:kill(15)
+ end,
request = request,
notify = notify,
}