diff --git a/runtime/lua/vim/lsp/completion.lua b/runtime/lua/vim/lsp/completion.lua index cf6dc28494..5bdcdc73a5 100644 --- a/runtime/lua/vim/lsp/completion.lua +++ b/runtime/lua/vim/lsp/completion.lua @@ -586,8 +586,8 @@ local function trigger(bufnr, clients, ctx) if result then Context.isIncomplete = Context.isIncomplete or result.isIncomplete local encoding = client and client.offset_encoding or 'utf-16' - local client_matches - client_matches, server_start_boundary = M._convert_results( + local client_matches, tmp_server_start_boundary + client_matches, tmp_server_start_boundary = M._convert_results( line, cursor_row - 1, cursor_col, @@ -598,6 +598,7 @@ local function trigger(bufnr, clients, ctx) encoding ) + server_start_boundary = tmp_server_start_boundary or server_start_boundary vim.list_extend(matches, client_matches) end end diff --git a/test/functional/plugin/lsp/completion_spec.lua b/test/functional/plugin/lsp/completion_spec.lua index 41d54566ba..2edad62151 100644 --- a/test/functional/plugin/lsp/completion_spec.lua +++ b/test/functional/plugin/lsp/completion_spec.lua @@ -1427,6 +1427,48 @@ describe('vim.lsp.completion: integration', function() eq({ 1, 17 }, n.api.nvim_win_get_cursor(0)) end) + it('does not empty server start boundary', function() + local completion_list = { + isIncomplete = false, + items = { + { + label = 'div.foo', + insertTextFormat = 2, + textEdit = { + newText = '