Skip to content

Commit 1250990

Browse files
abeldekatabeldekat
andauthored
fix: Outdated completion item with mini.snippets (#2126)
* fix: Outdated completion item with mini.snippets * fix: Outdated completion item with mini.snippets. Prevent completion suggestions directly after snippet expand * fix: Outdated completion item with mini.snippets. Undo changes * fix: Outdated completion item with mini.snippets. The cmp.resubscribe solution --------- Co-authored-by: abeldekat <[email protected]>
1 parent 8c82d0b commit 1250990

File tree

4 files changed

+57
-7
lines changed

4 files changed

+57
-7
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ Plug 'hrsh7th/vim-vsnip'
4646
" Plug 'L3MON4D3/LuaSnip'
4747
" Plug 'saadparwaiz1/cmp_luasnip'
4848
49+
" For mini.snippets users.
50+
" Plug 'echasnovski/mini.snippets'
51+
" Plug 'abeldekat/cmp-mini-snippets'
52+
4953
" For ultisnips users.
5054
" Plug 'SirVer/ultisnips'
5155
" Plug 'quangnguyen30192/cmp-nvim-ultisnips'
@@ -69,6 +73,12 @@ lua <<EOF
6973
-- require('snippy').expand_snippet(args.body) -- For `snippy` users.
7074
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
7175
-- vim.snippet.expand(args.body) -- For native neovim snippets (Neovim v0.10+)
76+
77+
-- For `mini.snippets` users:
78+
-- local insert = MiniSnippets.config.expand.insert or MiniSnippets.default_insert
79+
-- insert({ body = args.body }) -- Insert at cursor
80+
-- cmp.resubscribe({ "TextChangedI", "TextChangedP" })
81+
-- require("cmp.config").set_onetime({ sources = {} })
7282
end,
7383
},
7484
window = {

doc/cmp.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ A recommended configuration can be found below.
6262
" Plug 'L3MON4D3/LuaSnip'
6363
" Plug 'saadparwaiz1/cmp_luasnip'
6464

65+
" For mini.snippets users.
66+
" Plug 'echasnovski/mini.snippets'
67+
" Plug 'abeldekat/cmp-mini-snippets'
68+
6569
" For snippy users.
6670
" Plug 'dcampos/nvim-snippy'
6771
" Plug 'dcampos/cmp-snippy'
@@ -86,6 +90,12 @@ A recommended configuration can be found below.
8690
-- require'snippy'.expand_snippet(args.body) -- For `snippy` users.
8791
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
8892
-- vim.snippet.expand(args.body) -- For native neovim snippets (Neovim v0.10+)
93+
94+
-- For `mini.snippets` users:
95+
-- local insert = MiniSnippets.config.expand.insert or MiniSnippets.default_insert
96+
-- insert({ body = args.body }) -- Insert at cursor
97+
-- cmp.resubscribe({ "TextChangedI", "TextChangedP" })
98+
-- require("cmp.config").set_onetime({ sources = {} })
8999
end,
90100
},
91101
window = {

lua/cmp/init.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,12 @@ cmp.status = function()
328328
end
329329
end
330330

331+
---Ensures that cmp is the last receiver of the events specified.
332+
---@param events string[]
333+
cmp.resubscribe = function(events)
334+
autocmd.resubscribe(events)
335+
end
336+
331337
---@type cmp.Setup
332338
cmp.setup = setmetatable({
333339
global = function(c)

lua/cmp/utils/autocmd.lua

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ autocmd.group = vim.api.nvim_create_augroup('___cmp___', { clear = true })
66

77
autocmd.events = {}
88

9+
local function create_autocmd(event)
10+
vim.api.nvim_create_autocmd(event, {
11+
desc = ('nvim-cmp: autocmd: %s'):format(event),
12+
group = autocmd.group,
13+
callback = function()
14+
autocmd.emit(event)
15+
end,
16+
})
17+
end
18+
919
---Subscribe autocmd
1020
---@param events string|string[]
1121
---@param callback function
@@ -16,13 +26,7 @@ autocmd.subscribe = function(events, callback)
1626
for _, event in ipairs(events) do
1727
if not autocmd.events[event] then
1828
autocmd.events[event] = {}
19-
vim.api.nvim_create_autocmd(event, {
20-
desc = ('nvim-cmp: autocmd: %s'):format(event),
21-
group = autocmd.group,
22-
callback = function()
23-
autocmd.emit(event)
24-
end,
25-
})
29+
create_autocmd(event)
2630
end
2731
table.insert(autocmd.events[event], callback)
2832
end
@@ -50,4 +54,24 @@ autocmd.emit = function(event)
5054
end
5155
end
5256

57+
---Resubscribe to events
58+
---@param events string[]
59+
autocmd.resubscribe = function(events)
60+
-- Delete the autocommands if present
61+
local found = vim.api.nvim_get_autocmds({
62+
group = autocmd.group,
63+
event = events,
64+
})
65+
for _, to_delete in ipairs(found) do
66+
vim.api.nvim_del_autocmd(to_delete.id)
67+
end
68+
69+
-- Recreate if event is known
70+
for _, event in ipairs(events) do
71+
if autocmd.events[event] then
72+
create_autocmd(event)
73+
end
74+
end
75+
end
76+
5377
return autocmd

0 commit comments

Comments
 (0)