diff options
author | Mathias Fußenegger <mfussenegger@users.noreply.github.com> | 2021-09-28 18:13:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-28 09:13:44 -0700 |
commit | ff18a8bcc4749c7ee169b63ef05ac1238d2de26e (patch) | |
tree | 5b5c59ffa4eb6f77fda61bbcce2e81c35ad71402 /runtime/lua/vim/lsp/rpc.lua | |
parent | 9ca7b6b71a1e98ff6a76270d165fc8f07763a0c3 (diff) | |
download | rneovim-ff18a8bcc4749c7ee169b63ef05ac1238d2de26e.tar.gz rneovim-ff18a8bcc4749c7ee169b63ef05ac1238d2de26e.tar.bz2 rneovim-ff18a8bcc4749c7ee169b63ef05ac1238d2de26e.zip |
refactor(lsp): remove json encode/decode wrappers (#15826)
Diffstat (limited to 'runtime/lua/vim/lsp/rpc.lua')
-rw-r--r-- | runtime/lua/vim/lsp/rpc.lua | 39 |
1 files changed, 6 insertions, 33 deletions
diff --git a/runtime/lua/vim/lsp/rpc.lua b/runtime/lua/vim/lsp/rpc.lua index 716f42faf9..255eb65dfe 100644 --- a/runtime/lua/vim/lsp/rpc.lua +++ b/runtime/lua/vim/lsp/rpc.lua @@ -4,34 +4,6 @@ local log = require('vim.lsp.log') local protocol = require('vim.lsp.protocol') local validate, schedule, schedule_wrap = vim.validate, vim.schedule, vim.schedule_wrap --- TODO replace with a better implementation. ----@private ---- Encodes to JSON. ---- ----@param data (table) Data to encode ----@returns (string) Encoded object -local function json_encode(data) - local status, result = pcall(vim.json.encode, data) - if status then - return result - else - return nil, result - end -end ----@private ---- Decodes from JSON. ---- ----@param data (string) Data to decode ----@returns (table) Decoded JSON object -local function json_decode(data) - local status, result = pcall(vim.json.decode, data) - if status then - return result - else - return nil, result - end -end - ---@private --- Checks whether a given path exists and is a directory. ---@param filename (string) path to check @@ -389,12 +361,12 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params) --- Encodes {payload} into a JSON-RPC message and sends it to the remote --- process. --- - ---@param payload (table) Converted into a JSON string, see |json_encode()| + ---@param payload table ---@returns true if the payload could be scheduled, false if the main event-loop is in the process of closing. local function encode_and_send(payload) local _ = log.debug() and log.debug("rpc.send", payload) if handle == nil or handle:is_closing() then return false end - local encoded = assert(json_encode(payload)) + local encoded = vim.json.encode(payload) stdin:write(format_message_with_content_length(encoded)) return true end @@ -485,14 +457,15 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params) ---@private local function handle_body(body) - local decoded, err = json_decode(body) - if not decoded then - -- on_error(client_errors.INVALID_SERVER_JSON, err) + local ok, decoded = pcall(vim.json.decode, body) + if not ok then + on_error(client_errors.INVALID_SERVER_JSON, decoded) return end local _ = log.debug() and log.debug("rpc.receive", decoded) if type(decoded.method) == 'string' and decoded.id then + local err -- Server Request decoded.params = convert_NIL(decoded.params) -- Schedule here so that the users functions don't trigger an error and |