diff --git a/lua/cmp/core.lua b/lua/cmp/core.lua index 24112a3..d4e16dc 100644 --- a/lua/cmp/core.lua +++ b/lua/cmp/core.lua @@ -433,11 +433,11 @@ core.confirm = function(self, e, option, callback) return end vim.cmd([[silent! undojoin]]) - vim.lsp.util.apply_text_edits(text_edits, ctx.bufnr, e.source:get_position_encoding_kind()) + api.apply_text_edits(text_edits, ctx.bufnr, e.source:get_position_encoding_kind()) end) else vim.cmd([[silent! undojoin]]) - vim.lsp.util.apply_text_edits(e.completion_item.additionalTextEdits, ctx.bufnr, e.source:get_position_encoding_kind()) + api.apply_text_edits(e.completion_item.additionalTextEdits, ctx.bufnr, e.source:get_position_encoding_kind()) end end) feedkeys.call('', 'n', function() @@ -486,7 +486,7 @@ core.confirm = function(self, e, option, callback) if is_snippet then completion_item.textEdit.newText = '' end - vim.lsp.util.apply_text_edits({ completion_item.textEdit }, ctx.bufnr, 'utf-8') + api.apply_text_edits({ completion_item.textEdit }, ctx.bufnr, 'utf-8') local texts = vim.split(completion_item.textEdit.newText, '\n') vim.api.nvim_win_set_cursor(0, { diff --git a/lua/cmp/utils/api.lua b/lua/cmp/utils/api.lua index 968a5db..7d1c2f4 100644 --- a/lua/cmp/utils/api.lua +++ b/lua/cmp/utils/api.lua @@ -67,4 +67,15 @@ api.get_cursor_before_line = function() return string.sub(api.get_current_line(), 1, cursor[2]) end +--- Applies a list of text edits to a buffer. Preserves 'buflisted' state. +---@param text_edits lsp.TextEdit[] +---@param bufnr integer Buffer id +---@param position_encoding 'utf-8'|'utf-16'|'utf-32' +api.apply_text_edits = function(text_edits, bufnr, position_encoding) + -- preserve 'buflisted' state because vim.lsp.util.apply_text_edits forces it to true + local prev_buflisted = vim.bo[bufnr].buflisted + vim.lsp.util.apply_text_edits(text_edits, bufnr, position_encoding) + vim.bo[bufnr].buflisted = prev_buflisted +end + return api