Skip to content

Commit fec0cc7

Browse files
committed
perf: optimize signature help trigger management
1 parent ff564f4 commit fec0cc7

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

lua/astrolsp/init.lua

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,6 @@ local function check_cond(cond, client, bufnr)
3232
return true
3333
end
3434

35-
---@param dst any[]
36-
---@param src any[]?
37-
local function list_insert_unique(dst, src)
38-
if not dst then dst = {} end
39-
if not src then return dst end
40-
local added = {}
41-
for _, val in ipairs(dst) do
42-
added[val] = true
43-
end
44-
for _, val in ipairs(src) do
45-
if not added[val] then
46-
table.insert(dst, val)
47-
added[val] = true
48-
end
49-
end
50-
return dst
51-
end
52-
5335
--- Add a new LSP progress message to the message queue
5436
---@param data {client_id: integer, params: lsp.ProgressParams}
5537
function M.progress(data)
@@ -255,10 +237,17 @@ function M.setup(opts)
255237
callback = function(args)
256238
local client = vim.lsp.get_client_by_id(args.data.client_id)
257239
if client and client.supports_method "textDocument/signatureHelp" then
258-
vim.b[args.buf].signature_help_trigger = list_insert_unique(
259-
vim.b[args.buf].signature_help_trigger,
260-
client.server_capabilities.signatureHelpProvider.triggerCharacters
261-
)
240+
local triggers, added_triggers = vim.b[args.buf].signature_help_trigger or {}, {}
241+
for _, trigger in ipairs(triggers) do
242+
added_triggers[trigger] = true
243+
end
244+
for _, trigger in ipairs(client.server_capabilities.signatureHelpProvider.triggerCharacters or {}) do
245+
if not added_triggers[trigger] then
246+
table.insert(triggers, trigger)
247+
added_triggers[trigger] = true
248+
end
249+
end
250+
vim.b[args.buf].signature_help_trigger = triggers
262251
end
263252
end,
264253
})
@@ -267,10 +256,15 @@ function M.setup(opts)
267256
desc = "Safely remove LSP signature help triggers when language servers detach",
268257
callback = vim.schedule_wrap(function(args)
269258
if not vim.api.nvim_buf_is_valid(args.buf) then return end
270-
local signature_help_trigger = {}
259+
local signature_help_trigger, added_triggers = {}, {}
271260
for _, client in pairs((vim.lsp.get_clients or vim.lsp.get_active_clients) { bufnr = args.buf }) do
272261
if client.id ~= args.data.client_id and client.supports_method "textDocument/signatureHelp" then
273-
list_insert_unique(signature_help_trigger, client.server_capabilities.signatureHelpProvider.triggerCharacters)
262+
for _, trigger in ipairs(client.server_capabilities.signatureHelpProvider.triggerCharacters or {}) do
263+
if not added_triggers[trigger] then
264+
table.insert(signature_help_trigger, trigger)
265+
added_triggers[trigger] = true
266+
end
267+
end
274268
end
275269
end
276270
vim.b[args.buf].signature_help_trigger = signature_help_trigger

0 commit comments

Comments
 (0)