From 85a20a4a468c81eab2a5c0c0650f028074af4522 Mon Sep 17 00:00:00 2001 From: Andreas Louv Date: Mon, 22 May 2023 22:30:39 +0200 Subject: [PATCH] Add support for lazy documentation and omni completion --- autoload/lsp/completion.vim | 27 ++++++++++++++++++++------- autoload/lsp/lspserver.vim | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index 1f240ae..444ec08 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -395,12 +395,24 @@ def ShowCompletionDocumentation(cItem: any) return endif + # autoComplete or &omnifunc with &completeopt =~ 'popup' var id = popup_findinfo() if id > 0 var bufnr = id->winbufnr() id->popup_settext(infoText) infoKind->setbufvar(bufnr, '&ft') id->popup_show() + else + # &omnifunc with &completeopt =~ 'preview' + execute $':silent! pedit Completion' + :wincmd P + :setlocal buftype=nofile + :setlocal bufhidden=delete + bufnr()->deletebufline(1, '$') + infoText->append(0) + [1, 1]->cursor() + exe $'setlocal ft={infoKind}' + :wincmd p endif enddef @@ -601,19 +613,20 @@ export def BufferInit(lspserver: dict, bnr: number, ftype: string) event: 'TextChangedI', group: 'LSPBufferAutocmds', cmd: 'LspComplete()'}) - if lspserver.completionLazyDoc - # resolve additional documentation for a selected item - acmds->add({bufnr: bnr, - event: 'CompleteChanged', - group: 'LSPBufferAutocmds', - cmd: 'LspResolve()'}) - endif else if LspOmniComplEnabled(ftype) setbufvar(bnr, '&omnifunc', 'g:LspOmniFunc') endif endif + if lspserver.completionLazyDoc + # resolve additional documentation for a selected item + acmds->add({bufnr: bnr, + event: 'CompleteChanged', + group: 'LSPBufferAutocmds', + cmd: 'LspResolve()'}) + endif + acmds->add({bufnr: bnr, event: 'CompleteChanged', group: 'LSPBufferAutocmds', diff --git a/autoload/lsp/lspserver.vim b/autoload/lsp/lspserver.vim index 8988cad..f7505de 100644 --- a/autoload/lsp/lspserver.vim +++ b/autoload/lsp/lspserver.vim @@ -113,9 +113,9 @@ def ServerInitReply(lspserver: dict, initResult: dict): void if opt.lspOptions.autoComplete && caps->has_key('completionProvider') lspserver.completionTriggerChars = caps.completionProvider->get('triggerCharacters', []) - lspserver.completionLazyDoc = - caps.completionProvider->get('resolveProvider', false) endif + lspserver.completionLazyDoc = + caps.completionProvider->get('resolveProvider', false) # send a "initialized" notification to server lspserver.sendInitializedNotif() -- 2.48.1