mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00
perf(lsp): avoid repeated table lookup in completion.enable
This commit is contained in:

committed by
Mathias Fußenegger

parent
4c938f6d72
commit
138a93a057
@@ -575,8 +575,10 @@ end
|
|||||||
---@param bufnr integer
|
---@param bufnr integer
|
||||||
---@param opts vim.lsp.completion.BufferOpts
|
---@param opts vim.lsp.completion.BufferOpts
|
||||||
local function enable_completions(client_id, bufnr, opts)
|
local function enable_completions(client_id, bufnr, opts)
|
||||||
if not buf_handles[bufnr] then
|
local buf_handle = buf_handles[bufnr]
|
||||||
buf_handles[bufnr] = { clients = {}, triggers = {} }
|
if not buf_handle then
|
||||||
|
buf_handle = { clients = {}, triggers = {} }
|
||||||
|
buf_handles[bufnr] = buf_handle
|
||||||
|
|
||||||
-- Attach to buffer events.
|
-- Attach to buffer events.
|
||||||
api.nvim_buf_attach(bufnr, false, {
|
api.nvim_buf_attach(bufnr, false, {
|
||||||
@@ -617,12 +619,12 @@ local function enable_completions(client_id, bufnr, opts)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if not buf_handles[bufnr].clients[client_id] then
|
if not buf_handle.clients[client_id] then
|
||||||
local client = lsp.get_client_by_id(client_id)
|
local client = lsp.get_client_by_id(client_id)
|
||||||
assert(client, 'invalid client ID')
|
assert(client, 'invalid client ID')
|
||||||
|
|
||||||
-- Add the new client to the buffer's clients.
|
-- Add the new client to the buffer's clients.
|
||||||
buf_handles[bufnr].clients[client_id] = client
|
buf_handle.clients[client_id] = client
|
||||||
|
|
||||||
-- Add the new client to the clients that should be triggered by its trigger characters.
|
-- Add the new client to the clients that should be triggered by its trigger characters.
|
||||||
--- @type string[]
|
--- @type string[]
|
||||||
@@ -632,10 +634,10 @@ local function enable_completions(client_id, bufnr, opts)
|
|||||||
'triggerCharacters'
|
'triggerCharacters'
|
||||||
) or {}
|
) or {}
|
||||||
for _, char in ipairs(triggers) do
|
for _, char in ipairs(triggers) do
|
||||||
local clients_for_trigger = buf_handles[bufnr].triggers[char]
|
local clients_for_trigger = buf_handle.triggers[char]
|
||||||
if not clients_for_trigger then
|
if not clients_for_trigger then
|
||||||
clients_for_trigger = {}
|
clients_for_trigger = {}
|
||||||
buf_handles[bufnr].triggers[char] = clients_for_trigger
|
buf_handle.triggers[char] = clients_for_trigger
|
||||||
end
|
end
|
||||||
local client_exists = vim.iter(clients_for_trigger):any(function(c)
|
local client_exists = vim.iter(clients_for_trigger):any(function(c)
|
||||||
return c.id == client_id
|
return c.id == client_id
|
||||||
|
Reference in New Issue
Block a user