From 44309b9d08ba657d8c2ee5ed614c14b0fa0cfefc Mon Sep 17 00:00:00 2001 From: Maxim Kim Date: Fri, 25 Jul 2025 18:30:14 +0200 Subject: [PATCH] runtime(ccomplete): return partial results on complete_check() closes: #17838 Signed-off-by: Maxim Kim Signed-off-by: Christian Brabandt --- runtime/autoload/ccomplete.vim | 46 +++++++++++----------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim index c19281bb4c..cb4bb2c167 100644 --- a/runtime/autoload/ccomplete.vim +++ b/runtime/autoload/ccomplete.vim @@ -3,7 +3,7 @@ vim9script noclear # Vim completion script # Language: C # Maintainer: The Vim Project -# Last Change: 2025 Jul 23 +# Last Change: 2025 Jul 24 # Rewritten in Vim9 script by github user lacygoill # Former Maintainer: Bram Moolenaar @@ -82,9 +82,6 @@ export def Complete(findstart: bool, abase: string): any # {{{1 var s: number = 0 var arrays: number = 0 while 1 - if complete_check() - return v:none - endif var e: number = base->charidx(match(base, '\.\|->\|\[', s)) if e < 0 if s == 0 || base[s - 1] != ']' @@ -107,9 +104,6 @@ export def Complete(findstart: bool, abase: string): any # {{{1 s = e ++e while e < strcharlen(base) - if complete_check() - return v:none - endif if base[e] == ']' if n == 0 break @@ -146,7 +140,7 @@ export def Complete(findstart: bool, abase: string): any # {{{1 var col2: number = col - 1 while line[col2] != ';' if complete_check() - return v:none + return res endif --col2 endwhile @@ -159,7 +153,7 @@ export def Complete(findstart: bool, abase: string): any # {{{1 var col2: number = col - 1 while line[col2] != ',' if complete_check() - return v:none + return res endif --col2 endwhile @@ -200,10 +194,6 @@ export def Complete(findstart: bool, abase: string): any # {{{1 endif endif - if complete_check() - return v:none - endif - if len(items) == 1 || len(items) == arrays + 1 # Only one part, no "." or "->": complete from tags file. var tags: list> @@ -226,10 +216,6 @@ export def Complete(findstart: bool, abase: string): any # {{{1 res = res->extend(tags->map((_, v: dict) => Tag2item(v))) endif - if complete_check() - return v:none - endif - if len(res) == 0 # Find the variable in the tags file(s) var diclist: list> = taglist('^' .. items[0] .. '$') @@ -240,7 +226,7 @@ export def Complete(findstart: bool, abase: string): any # {{{1 res = [] for i: number in len(diclist)->range() if complete_check() - return [] + return res endif # New ctags has the "typeref" field. Patched version has "typename". if diclist[i]->has_key('typename') @@ -261,10 +247,6 @@ export def Complete(findstart: bool, abase: string): any # {{{1 endfor endif - if complete_check() - return v:none - endif - if len(res) == 0 && items[0]->searchdecl(true) == 0 # Found, now figure out the type. # TODO: join previous line if it makes sense @@ -278,7 +260,7 @@ export def Complete(findstart: bool, abase: string): any # {{{1 var brackets: string = '' while last >= 0 if complete_check() - return v:none + return res endif if items[last][0] != '[' break @@ -346,7 +328,7 @@ def Dict2info(dict: dict): string # {{{1 var info: string = '' for k: string in dict->keys()->sort() if complete_check() - return "" + return info endif info ..= k .. repeat(' ', 10 - strlen(k)) if k == 'cmd' @@ -384,7 +366,7 @@ def ParseTagline(line: string): dict # {{{1 endif for i: number in range(n + 1, len(l) - 1) if complete_check() - return {} + return d endif if l[i] == 'file:' d['static'] = 1 @@ -482,7 +464,7 @@ def Nextitem( # {{{1 var res: list> for tidx: number in len(tokens)->range() if complete_check() - return [] + return res endif # Skip tokens starting with a non-ID character. @@ -510,9 +492,11 @@ def Nextitem( # {{{1 # Use the tags file to find out if this is a typedef. var diclist: list> = taglist('^' .. tokens[tidx] .. '$') for tagidx: number in len(diclist)->range() - if complete_check() - return [] - endif + + if complete_check() + return res + endif + var item: dict = diclist[tagidx] # New ctags has the "typeref" field. Patched version has "typename". @@ -672,7 +656,7 @@ def StructMembers( # {{{1 ++idx while 1 if complete_check() - return [] + return matches endif if idx >= len(items) return matches # No further items, return the result. @@ -702,7 +686,7 @@ def SearchMembers( # {{{1 var res: list> for i: number in len(matches)->range() if complete_check() - return [] + return res endif var typename: string = '' var line: string