summaryrefslogtreecommitdiff
path: root/lua/blink/cmp/completion/accept/preview.lua
diff options
context:
space:
mode:
authorMike Vink <mike@pionative.com>2025-01-19 13:52:52 +0100
committerMike Vink <mike@pionative.com>2025-01-19 13:52:52 +0100
commitb77413ff8f59f380612074f0c9bd49093d8db695 (patch)
tree32c39a811ba96ed4ab0a1c81cce9f8d518ed7e31 /lua/blink/cmp/completion/accept/preview.lua
Squashed 'mut/neovim/pack/plugins/start/blink.cmp/' content from commit 1cc3b1a
git-subtree-dir: mut/neovim/pack/plugins/start/blink.cmp git-subtree-split: 1cc3b1a908fbcfd15451c4772759549724f38524
Diffstat (limited to 'lua/blink/cmp/completion/accept/preview.lua')
-rw-r--r--lua/blink/cmp/completion/accept/preview.lua35
1 files changed, 35 insertions, 0 deletions
diff --git a/lua/blink/cmp/completion/accept/preview.lua b/lua/blink/cmp/completion/accept/preview.lua
new file mode 100644
index 0000000..88b46e2
--- /dev/null
+++ b/lua/blink/cmp/completion/accept/preview.lua
@@ -0,0 +1,35 @@
+--- @param item blink.cmp.CompletionItem
+--- @return lsp.TextEdit undo_text_edit, integer[]? undo_cursor_pos The text edit to apply and the original cursor
+--- position to move to when undoing the preview,
+local function preview(item)
+ local text_edits_lib = require('blink.cmp.lib.text_edits')
+ local text_edit = text_edits_lib.get_from_item(item)
+
+ if item.insertTextFormat == vim.lsp.protocol.InsertTextFormat.Snippet then
+ local expanded_snippet = require('blink.cmp.sources.snippets.utils').safe_parse(text_edit.newText)
+ local snippet = expanded_snippet and tostring(expanded_snippet) or text_edit.newText
+ local get_prefix_before_brackets_and_quotes = require('blink.cmp.completion.accept.prefix')
+ text_edit.newText = get_prefix_before_brackets_and_quotes(snippet)
+ end
+
+ local undo_text_edit = text_edits_lib.get_undo_text_edit(text_edit)
+ local cursor_pos = {
+ text_edit.range.start.line + 1,
+ text_edit.range.start.character + #text_edit.newText,
+ }
+
+ text_edits_lib.apply({ text_edit })
+
+ local original_cursor = vim.api.nvim_win_get_cursor(0)
+ local cursor_moved = false
+
+ -- TODO: remove when text_edits_lib.apply begins setting cursor position
+ if vim.api.nvim_get_mode().mode ~= 'c' then
+ vim.api.nvim_win_set_cursor(0, cursor_pos)
+ cursor_moved = true
+ end
+
+ return undo_text_edit, cursor_moved and original_cursor or nil
+end
+
+return preview