aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Fussenegger <f.mathias@zignar.net>2024-05-30 10:51:52 +0200
committerMathias Fußenegger <mfussenegger@users.noreply.github.com>2024-06-01 10:23:01 +0200
commit138a93a057dabd70673b7466bf5af41bd66f1385 (patch)
tree994ebabb975daa69dc207cad81ccb4bb24734aed
parent4c938f6d72710507db22074951eee23869ed49e0 (diff)
downloadrneovim-138a93a057dabd70673b7466bf5af41bd66f1385.tar.gz
rneovim-138a93a057dabd70673b7466bf5af41bd66f1385.tar.bz2
rneovim-138a93a057dabd70673b7466bf5af41bd66f1385.zip
perf(lsp): avoid repeated table lookup in completion.enable
-rw-r--r--runtime/lua/vim/lsp/completion.lua14
1 files changed, 8 insertions, 6 deletions
diff --git a/runtime/lua/vim/lsp/completion.lua b/runtime/lua/vim/lsp/completion.lua
index c514c5ef4d..b77bf3e3c2 100644
--- a/runtime/lua/vim/lsp/completion.lua
+++ b/runtime/lua/vim/lsp/completion.lua
@@ -575,8 +575,10 @@ end
---@param bufnr integer
---@param opts vim.lsp.completion.BufferOpts
local function enable_completions(client_id, bufnr, opts)
- if not buf_handles[bufnr] then
- buf_handles[bufnr] = { clients = {}, triggers = {} }
+ local buf_handle = buf_handles[bufnr]
+ if not buf_handle then
+ buf_handle = { clients = {}, triggers = {} }
+ buf_handles[bufnr] = buf_handle
-- Attach to buffer events.
api.nvim_buf_attach(bufnr, false, {
@@ -617,12 +619,12 @@ local function enable_completions(client_id, bufnr, opts)
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)
assert(client, 'invalid client ID')
-- 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.
--- @type string[]
@@ -632,10 +634,10 @@ local function enable_completions(client_id, bufnr, opts)
'triggerCharacters'
) or {}
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
clients_for_trigger = {}
- buf_handles[bufnr].triggers[char] = clients_for_trigger
+ buf_handle.triggers[char] = clients_for_trigger
end
local client_exists = vim.iter(clients_for_trigger):any(function(c)
return c.id == client_id