autoload/lsp/completion.vim | 6 ++++-- test/clangd_tests.vim | 26 ++++++++++++++++++++++++-- diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index 9e78adb6bf5dc20441732cae114b333e02c9ac5c..71984d82a3b6a897ff966ed77a4375d32a999d30 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -477,7 +477,9 @@ if findstart 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 @@ if lspserver.omniCompletePending 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 1da68c0062443bd441990e4586338af45e3addc9..fe2a16ca20a691be67358878638365f316d3b9bd 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -1471,7 +1471,7 @@ assert_equal('Foo_t#define FOO 1', getline('.')) :%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 @@ assert_equal(' int len = strlen("©©©©©") + thisVar;', getline('.')) :%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 @@ -1521,6 +1521,28 @@ assert_equal(' myTest.baz = 10;', getline('.')) cursor(11, 12) feedkeys("cw\\\\", 'xt') assert_equal(' pTest->baz = 20;', getline('.')) + :%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