diff --git a/runtime/lua/vim/lsp/completion.lua b/runtime/lua/vim/lsp/completion.lua index 7795f42645..74873d96f2 100644 --- a/runtime/lua/vim/lsp/completion.lua +++ b/runtime/lua/vim/lsp/completion.lua @@ -803,10 +803,11 @@ local function on_completechanged(group, bufnr) then -- Shows snippet preview in doc popup if completeopt=popup. local text = parse_snippet(lsp_item.insertText or lsp_item.textEdit.newText) - api.nvim__complete_set( + local windata = api.nvim__complete_set( data.selected, { info = ('```%s\n%s\n```'):format(vim.bo.filetype, text) } ) + update_popup_window(windata.winid, windata.bufnr, protocol.MarkupKind.Markdown) end return end diff --git a/test/functional/plugin/lsp/completion_spec.lua b/test/functional/plugin/lsp/completion_spec.lua index 81380e31a0..9315f723fb 100644 --- a/test/functional/plugin/lsp/completion_spec.lua +++ b/test/functional/plugin/lsp/completion_spec.lua @@ -1398,7 +1398,7 @@ describe('vim.lsp.completion: integration', function() exec_lua(function() vim.o.completeopt = 'menuone,popup' end) - create_server('dummy', completion_list, { + local dummy_client_id = create_server('dummy', completion_list, { resolve_result = { { detail = 'function', @@ -1474,6 +1474,41 @@ describe('vim.lsp.completion: integration', function() {1:~ }|*15 {5:-- INSERT --} | ]]) + + n.command('lua vim.lsp.buf_detach_client(0, ' .. dummy_client_id .. ')') + -- Server which doesn't support completionItem/resolve + create_server('dummy2', { + isIncomplete = false, + items = { + { + insertText = 'package main', + insertTextFormat = 1, + kind = 9, + label = 'package main', + sortText = '0001', + }, + { + insertText = 'package ${1:name}', + insertTextFormat = 2, + kind = 9, + label = 'package', + sortText = '0002', + }, + }, + }) + feed('S') + -- No popup shown for item without snippet + wait_for_pum() + eq(true, n.fn.complete_info({ 'selected' }).preview_bufnr == nil) + feed('') + -- Popup shown for item with snippet + screen:expect([[ + package^ | + {4:package main Module }{100:package name}{1: }| + {12:package Module }{1: }| + {1:~ }|*16 + {5:-- INSERT --} | + ]]) end) it('omnifunc works without enable() #38252', function()