@@ -32,24 +32,6 @@ local function check_cond(cond, client, bufnr)
3232 return true
3333end
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 }
5537function 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