From b42dc232c53211e718a39d8df2f80402f7ad9ac6 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Thu, 13 Feb 2025 05:08:11 -0500 Subject: fix(lsp): autotrigger should only trigger on client's triggerCharacters (#32266) Problem: autotrigger option of vim.lsp.completion.enable() would trigger all clients, as long as it matched at least one client's triggerCharacters. Solution: trigger only the clients with triggerCharacters matching the character. overtriggering still happens if any client returns isIncomplete=true (this case is more involved). Co-authored-by: Mathias Fussenegger --- runtime/lua/vim/lsp/completion.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/lsp/completion.lua b/runtime/lua/vim/lsp/completion.lua index cf6d07745f..09d38bbce3 100644 --- a/runtime/lua/vim/lsp/completion.lua +++ b/runtime/lua/vim/lsp/completion.lua @@ -518,11 +518,14 @@ local function on_insert_char_pre(handle) end local char = api.nvim_get_vvar('char') - if not completion_timer and handle.triggers[char] then + local matched_clients = handle.triggers[char] + if not completion_timer and matched_clients then completion_timer = assert(vim.uv.new_timer()) completion_timer:start(25, 0, function() reset_timer() - vim.schedule(M.trigger) + vim.schedule(function() + trigger(api.nvim_get_current_buf(), matched_clients) + end) end) end end -- cgit