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
return v:none
endif
- var res: list<dict<any>> = lspserver->get('completeItems', [])
+ var res: list<dict<any>> = lspserver.completeItems
var prefix = lspserver.omniCompleteKeyword
# Don't attempt to filter on the items, when "isIncomplete" is set
:%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
:%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
:%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<string> =<< trim END
+ #include <stdio.h>
+ void Fn(void)
+ {
+ printf(
+ }
+ END
+ setline(1, lines)
+ g:WaitForServerFileLoad(2)
+ redraw!
+
+ cursor(4, 1)
+ feedkeys("A\<C-X>\<C-O>\<C-Y>", 'xt')
+ assert_equal(' printf(', getline('.'))
+ :%bw!
+enddef
+
# Test for inlay hints
def g:Test_InlayHints()
:silent! edit XinlayHints.c