Fix cmdline confirmation

This commit is contained in:
hrsh7th
2021-11-05 22:44:43 +09:00
parent d0231d06de
commit 1774ff0f84
7 changed files with 82 additions and 27 deletions

View File

@@ -372,23 +372,34 @@ core.confirm = function(self, e, option, callback)
completion_item.textEdit.range = e:get_insert_range()
end
local is_snippet = completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet
local diff_before = e.context.cursor.character - completion_item.textEdit.range.start.character
local diff_after = completion_item.textEdit.range['end'].character - e.context.cursor.character
local new_text = completion_item.textEdit.newText
completion_item.textEdit.range.start.line = ctx.cursor.line
completion_item.textEdit.range.start.character = ctx.cursor.character - (e.context.cursor.character - completion_item.textEdit.range.start.character)
completion_item.textEdit.range['end'].line = ctx.cursor.line
completion_item.textEdit.range['end'].character = ctx.cursor.character + (completion_item.textEdit.range['end'].character - e.context.cursor.character)
if is_snippet then
completion_item.textEdit.newText = ''
if api.is_insert_mode() then
local is_snippet = completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet
completion_item.textEdit.range.start.line = ctx.cursor.line
completion_item.textEdit.range.start.character = ctx.cursor.character - diff_before
completion_item.textEdit.range['end'].line = ctx.cursor.line
completion_item.textEdit.range['end'].character = ctx.cursor.character + diff_after
if is_snippet then
completion_item.textEdit.newText = ''
end
vim.fn['cmp#apply_text_edits'](ctx.bufnr, { completion_item.textEdit })
if is_snippet then
config.get().snippet.expand({
body = new_text,
insert_text_mode = completion_item.insertTextMode,
})
end
next()
else
local keys = {}
table.insert(keys, string.rep(keymap.t('<BS>'), diff_before))
table.insert(keys, string.rep(keymap.t('<Del>'), diff_after))
table.insert(keys, new_text)
feedkeys.call(table.concat(keys, ''), 'n', next)
end
vim.fn['cmp#apply_text_edits'](ctx.bufnr, { completion_item.textEdit })
if is_snippet then
config.get().snippet.expand({
body = new_text,
insert_text_mode = completion_item.insertTextMode,
})
end
next()
-- Finalize
end, function()