feat(api): pass 0 to nvim_get_chan_info for current channel (#27321)

Getting current channel info was kind of annoying via RPC. Two
functions had to be called:
1. `nvim_get_api_info` which returns `[channel_id, meta_data]`.
  - This results in `channel_id = api.nvim_get_api_info()[0]`.
  - Here the meta_data is sent but never used.
2. Finally call `nvim_get_chan_info(channel_id)`.

This commit reduces the need for `nvim_get_api_info` as passing 0
returns current channel info.
This commit is contained in:
nikolightsaber
2024-02-08 11:59:31 +01:00
committed by GitHub
parent 3f2d543ee8
commit b162adbb7c
5 changed files with 16 additions and 3 deletions

View File

@ -888,6 +888,9 @@ nvim_get_api_info() *nvim_get_api_info()*
nvim_get_chan_info({chan}) *nvim_get_chan_info()* nvim_get_chan_info({chan}) *nvim_get_chan_info()*
Gets information about a channel. Gets information about a channel.
Parameters: ~
• {chan} channel_id, or 0 for current channel
Return: ~ Return: ~
Dictionary describing a channel, with these keys: Dictionary describing a channel, with these keys:
• "id" Channel id. • "id" Channel id.

View File

@ -405,6 +405,8 @@ The following changes to existing APIs or features add new behavior.
• Attempting to set an invalid keycode option (e.g. `set t_foo=123`) no longer • Attempting to set an invalid keycode option (e.g. `set t_foo=123`) no longer
gives an error. gives an error.
• Passing 0 to |nvim_get_chan_info()| gets info about the current channel.
• |:checkhealth| buffer can now be opened in a split window using modifiers like • |:checkhealth| buffer can now be opened in a split window using modifiers like
|:vertical|, |:horizontal| and |:botright|. |:vertical|, |:horizontal| and |:botright|.

View File

@ -1158,7 +1158,7 @@ function vim.api.nvim_get_autocmds(opts) end
--- Gets information about a channel. --- Gets information about a channel.
--- ---
--- @param chan integer --- @param chan integer channel_id, or 0 for current channel
--- @return table<string,any> --- @return table<string,any>
function vim.api.nvim_get_chan_info(chan) end function vim.api.nvim_get_chan_info(chan) end

View File

@ -1612,6 +1612,7 @@ void nvim_set_client_info(uint64_t channel_id, String name, Dictionary version,
/// Gets information about a channel. /// Gets information about a channel.
/// ///
/// @param chan channel_id, or 0 for current channel
/// @returns Dictionary describing a channel, with these keys: /// @returns Dictionary describing a channel, with these keys:
/// - "id" Channel id. /// - "id" Channel id.
/// - "argv" (optional) Job arguments list. /// - "argv" (optional) Job arguments list.
@ -1633,12 +1634,17 @@ void nvim_set_client_info(uint64_t channel_id, String name, Dictionary version,
/// the RPC channel), if provided by it via /// the RPC channel), if provided by it via
/// |nvim_set_client_info()|. /// |nvim_set_client_info()|.
/// ///
Dictionary nvim_get_chan_info(Integer chan, Error *err) Dictionary nvim_get_chan_info(uint64_t channel_id, Integer chan, Error *err)
FUNC_API_SINCE(4) FUNC_API_SINCE(4)
{ {
if (chan < 0) { if (chan < 0) {
return (Dictionary)ARRAY_DICT_INIT; return (Dictionary)ARRAY_DICT_INIT;
} }
if (chan == 0 && !is_internal_call(channel_id)) {
assert(channel_id <= INT64_MAX);
chan = (Integer)channel_id;
}
return channel_info((uint64_t)chan); return channel_info((uint64_t)chan);
} }

View File

@ -2449,7 +2449,6 @@ describe('API', function()
} }
it('returns {} for invalid channel', function() it('returns {} for invalid channel', function()
eq({}, api.nvim_get_chan_info(0))
eq({}, api.nvim_get_chan_info(-1)) eq({}, api.nvim_get_chan_info(-1))
-- more preallocated numbers might be added, try something high -- more preallocated numbers might be added, try something high
eq({}, api.nvim_get_chan_info(10)) eq({}, api.nvim_get_chan_info(10))
@ -2457,6 +2456,8 @@ describe('API', function()
it('stream=stdio channel', function() it('stream=stdio channel', function()
eq({ [1] = testinfo, [2] = stderr }, api.nvim_list_chans()) eq({ [1] = testinfo, [2] = stderr }, api.nvim_list_chans())
-- 0 should return current channel
eq(testinfo, api.nvim_get_chan_info(0))
eq(testinfo, api.nvim_get_chan_info(1)) eq(testinfo, api.nvim_get_chan_info(1))
eq(stderr, api.nvim_get_chan_info(2)) eq(stderr, api.nvim_get_chan_info(2))
@ -2522,6 +2523,7 @@ describe('API', function()
"Vim:Error invoking 'nvim_set_current_buf' on channel 3 (amazing-cat):\nWrong type for argument 1 when calling nvim_set_current_buf, expecting Buffer", "Vim:Error invoking 'nvim_set_current_buf' on channel 3 (amazing-cat):\nWrong type for argument 1 when calling nvim_set_current_buf, expecting Buffer",
pcall_err(eval, 'rpcrequest(3, "nvim_set_current_buf", -1)') pcall_err(eval, 'rpcrequest(3, "nvim_set_current_buf", -1)')
) )
eq(info, eval('rpcrequest(3, "nvim_get_chan_info", 0)'))
end) end)
it('stream=job :terminal channel', function() it('stream=job :terminal channel', function()