From 0b9bba0ee4eaa84a75d88a0775b3b34dbf42b12d Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Mon, 26 Feb 2024 08:07:36 -0800 Subject: [PATCH] omni completion results in an error message after a opening parenthesis --- autoload/lsp/completion.vim | 6 ++++-- test/clangd_tests.vim | 26 ++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index 9e78adb..71984d8 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -477,7 +477,9 @@ def g:LspOmniFunc(findstart: number, base: string): any var [triggerKind, triggerChar] = GetTriggerAttributes(lspserver) if triggerKind < 0 - return -1 + # previous character is not a keyword character or a trigger character, + # so cancel omni completion. + return -2 endif # first send all the changes in the current buffer to the LSP server @@ -509,7 +511,7 @@ def g:LspOmniFunc(findstart: number, base: string): any return v:none endif - var res: list> = lspserver->get('completeItems', []) + var res: list> = lspserver.completeItems var prefix = lspserver.omniCompleteKeyword # Don't attempt to filter on the items, when "isIncomplete" is set diff --git a/test/clangd_tests.vim b/test/clangd_tests.vim index 1da68c0..fe2a16c 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -1471,7 +1471,7 @@ def g:Test_OmniComplete_FirstColumn() :%bw! enddef -# Test for doing omni completion from the first column +# Test for doing omni completion with a multibyte character def g:Test_OmniComplete_Multibyte() :silent! edit XOmniCompleteMultibyte.c sleep 200m @@ -1493,7 +1493,7 @@ def g:Test_OmniComplete_Multibyte() :%bw! enddef -# Test for doing omni completion from the first column +# Test for doing omni completion for a struct field def g:Test_OmniComplete_Struct() :silent! edit XOmniCompleteStruct.c sleep 200m @@ -1524,6 +1524,28 @@ def g:Test_OmniComplete_Struct() :%bw! enddef +# Test for doing omni completion after an opening parenthesis. +# This used to result in an error message. +def g:Test_OmniComplete_AfterParen() + :silent! edit XOmniCompleteAfterParen.c + sleep 200m + var lines: list =<< trim END + #include + void Fn(void) + { + printf( + } + END + setline(1, lines) + g:WaitForServerFileLoad(2) + redraw! + + cursor(4, 1) + feedkeys("A\\\", 'xt') + assert_equal(' printf(', getline('.')) + :%bw! +enddef + # Test for inlay hints def g:Test_InlayHints() :silent! edit XinlayHints.c -- 2.48.1