From 545919221bea28d36169ed27a04915b2de89d683 Mon Sep 17 00:00:00 2001 From: Andreas Louv Date: Sun, 19 Mar 2023 11:30:38 +0100 Subject: [PATCH] Respect "isIncomplete" when omni completing The specifications states: > for speed clients should be able to filter an already received > completion list if the user continues typing. Servers can opt out of > this using a CompletionList and mark it as isIncomplete --- autoload/lsp/completion.vim | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index e50f2a0..5932990 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -78,11 +78,14 @@ export def CompletionReply(lspserver: dict, cItems: any) return endif + lspserver.completeItemsIsIncomplete = false + var items: list> if cItems->type() == v:t_list items = cItems else items = cItems.items + lspserver.completeItemsIsIncomplete = cItems.isIncomplete endif # Get the keyword prefix before the current cursor column. @@ -301,6 +304,12 @@ def g:LspOmniFunc(findstart: number, base: string): any endwhile var res: list> = lspserver.completeItems + + # Don't attempt to filter on the items, when "isIncomplete" is set + if lspserver.completeItemsIsIncomplete + return res->empty() ? v:none : res + endif + return res->empty() ? v:none : res->filter((i, v) => v.word =~# '^' .. lspserver.omniCompleteKeyword) endif enddef -- 2.48.1