mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-25 14:01:06 +00:00
feat: an extra for mini.snippets. First version, WIP
This commit is contained in:
parent
d0c366e4d8
commit
5b057e92eb
1 changed files with 117 additions and 0 deletions
117
lua/lazyvim/plugins/extras/coding/mini-snippets.lua
Normal file
117
lua/lazyvim/plugins/extras/coding/mini-snippets.lua
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
--[[
|
||||
|
||||
This extra for mini.snippets activates the following:
|
||||
1. During completion with either cmp or blink, expand lsp snippets
|
||||
2. To use other snippets: Press <c-j> in insert mode
|
||||
|
||||
Note that there is no completion source.
|
||||
Other snippets(custom or from friendly-snippets) are handled by pressing <c-j> in insert mode.
|
||||
|
||||
In default LazyVim, neither cmp nor blink define the default mappings used by mini.snippets
|
||||
For now, pressing tab and shift-tab inside a snippet just inserts a tab
|
||||
|
||||
-- TODO: Find a way to incorporate user defined mappings including super-tab
|
||||
-- TODO: Find a way to more easily support lang_patterns for snippets.gen_loader.from_lang
|
||||
--]]
|
||||
local function expand(args)
|
||||
---@diagnostic disable-next-line: undefined-global
|
||||
local insert = MiniSnippets.config.expand.insert or MiniSnippets.default_insert
|
||||
insert({ body = args.body }) -- insert at cursor
|
||||
end
|
||||
|
||||
local snippet_select_for_cmp = function(snippets, insert, opts)
|
||||
local cmp = require("cmp")
|
||||
if cmp.visible() then
|
||||
cmp.close()
|
||||
end
|
||||
|
||||
MiniSnippets.default_select(snippets, insert, opts)
|
||||
end
|
||||
local snippet_select_for_blink = function(snippets, insert, opts)
|
||||
-- Blink's cancel uses vim.schedule!
|
||||
require("blink.cmp").cancel()
|
||||
|
||||
-- Schedule, otherwise blink's virtual text is not removed on vim.ui.select
|
||||
vim.schedule(function()
|
||||
MiniSnippets.default_select(snippets, insert, opts)
|
||||
end)
|
||||
end
|
||||
local snippet_select_without_completion_engine = function(snippets, insert, opts)
|
||||
MiniSnippets.default_select(snippets, insert, opts)
|
||||
end
|
||||
local snippet_select = snippet_select_without_completion_engine
|
||||
|
||||
return {
|
||||
-- disable builtin snippet support
|
||||
{ "garymjr/nvim-snippets", optional = true, enabled = false },
|
||||
-- disable luasnip:
|
||||
{ "L3MON4D3/LuaSnip", optional = true, enabled = false },
|
||||
|
||||
-- add mini.snippets
|
||||
desc = "Manage and expand snippets (alternative for luasnip), currently in beta",
|
||||
{
|
||||
"echasnovski/mini.snippets",
|
||||
event = "InsertEnter",
|
||||
dependencies = {
|
||||
{
|
||||
"rafamadriz/friendly-snippets",
|
||||
},
|
||||
},
|
||||
opts = function()
|
||||
-- Unset snippet_forward. Handled by mini.snippets:
|
||||
LazyVim.cmp.actions.snippet_forward = nil
|
||||
|
||||
---Dummy snippet_stop, only needed because "esc" is overriden. See keymaps.lua
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
LazyVim.cmp.actions.snippet_stop = function() end
|
||||
|
||||
local snippets = require("mini.snippets")
|
||||
return {
|
||||
snippets = {
|
||||
snippets.gen_loader.from_lang(),
|
||||
},
|
||||
expand = {
|
||||
select = function(...)
|
||||
snippet_select(...) -- close completion windows on snippet select
|
||||
end,
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- nvim-cmp integration: Use mini.snippets to expand snippets from lsp
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
init = function()
|
||||
snippet_select = snippet_select_for_cmp
|
||||
end,
|
||||
optional = true,
|
||||
opts = function(_, opts)
|
||||
opts.snippet = {
|
||||
expand = function(args)
|
||||
expand(args) -- provide snippet expansion for lsp
|
||||
end,
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- blink.cmp integration: Use mini.snippets to expand snippets from lsp
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
init = function()
|
||||
snippet_select = snippet_select_for_blink
|
||||
end,
|
||||
optional = true,
|
||||
opts = function(_, opts)
|
||||
opts.snippets = {
|
||||
expand = function(snippet)
|
||||
expand({ body = snippet }) -- provide snippet expansion for lsp
|
||||
end,
|
||||
active = function()
|
||||
return false -- mini.snippets operates independently
|
||||
end,
|
||||
jump = function() end, -- mini.snippets operates independently
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue