diff --git a/runtime/lua/vim/lsp/completion.lua b/runtime/lua/vim/lsp/completion.lua index 7109f01468..0257494832 100644 --- a/runtime/lua/vim/lsp/completion.lua +++ b/runtime/lua/vim/lsp/completion.lua @@ -267,7 +267,10 @@ local function get_doc(item) then -- Shows snippet preview in doc popup if completeopt=popup. local text = parse_snippet(item.insertText or item.textEdit.newText) - return ('```%s\n%s\n```'):format(vim.bo.filetype, text) + item.documentation = { + kind = lsp.protocol.MarkupKind.Markdown, + value = ('```%s\n%s\n```'):format(vim.bo.filetype, text), + } end local doc = item.documentation @@ -778,7 +781,20 @@ local function on_completechanged(group, bufnr) local completed_item = vim.v.event.completed_item or {} if (completed_item.info or '') ~= '' then local data = vim.fn.complete_info({ 'selected' }) - update_popup_window(data.preview_winid, data.preview_bufnr) + local kind = vim.tbl_get( + completed_item, + 'user_data', + 'nvim', + 'lsp', + 'completion_item', + 'documentation', + 'kind' + ) + update_popup_window( + data.preview_winid, + data.preview_bufnr, + kind or lsp.protocol.MarkupKind.PlainText + ) return end diff --git a/test/functional/plugin/lsp/completion_spec.lua b/test/functional/plugin/lsp/completion_spec.lua index 3b05248c35..0232e29039 100644 --- a/test/functional/plugin/lsp/completion_spec.lua +++ b/test/functional/plugin/lsp/completion_spec.lua @@ -780,8 +780,10 @@ describe('vim.lsp.completion: item conversion', function() local result = complete('|', completion_list) eq('for .. ipairs', result.items[1].word) eq('```lua\nfor index, value in ipairs(t) do\n\t\nend\n```', result.items[1].info) + eq('markdown', result.items[1].user_data.nvim.lsp.completion_item.documentation.kind) eq('for .. ipairs 2', result.items[2].word) eq('```lua\nfor i, v in ipairs(t) do\n\t\nend\n```', result.items[2].info) + eq('markdown', result.items[2].user_data.nvim.lsp.completion_item.documentation.kind) end) end)