nixos-configuration/users/jrpotter/neovim/config/utils/luasnip.lua

99 lines
2.6 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

local M = {}
local luasnip = require('luasnip')
local types = require('luasnip.util.types')
function M.visual_isn(pos)
local d = luasnip.dynamic_node
local i = luasnip.insert_node
local isn = luasnip.indent_snippet_node
local sn = luasnip.snippet_node
return isn(pos, d(1, function(_, parent)
local res, env = {}, parent.snippet.env
for _, ele in ipairs(env.LS_SELECT_DEDENT or {}) do
table.insert(res, ele)
end
return sn(nil, i(1, res))
end), '$PARENT_INDENT\t')
end
function M.choice_index(choice_node)
for i, c in ipairs(choice_node.choices) do
if c == choice_node.active_choice then
return i
end
end
return 1
end
function M.setup()
luasnip.config.setup {
region_check_events = 'InsertEnter',
delete_check_events = 'InsertLeave',
store_selection_keys = '<tab>',
enable_autosnippets = true,
ext_opts = {
[types.snippet] = {
active = {
virt_text = { { '', 'DiagnosticWarn' } },
},
},
[types.insertNode] = {
passive = {
hl_group = 'DiagnosticVirtualTextWarn',
},
},
[types.choiceNode] = {
active = {
hl_group = 'DiagnosticVirtualTextHint',
virt_text = { { '', 'DiagnosticHint' } },
},
},
},
}
-- Track where we are expanding the snippet.
luasnip.env_namespace('INFO', {
init = function(info) return { POS = info.pos } end,
})
vim.keymap.set({ 'i', 's' }, '<c-e>', function()
if luasnip.choice_active() then
return '<Plug>luasnip-next-choice'
else
return '<c-e>'
end
end, { silent = true, expr = true, remap = true })
vim.keymap.set({ 'i', 's' }, '<c-y>', function()
if luasnip.choice_active() then
return '<Plug>luasnip-prev-choice'
else
return '<c-y>'
end
end, { silent = true, expr = true, remap = true })
-- Allow aborting the active snippet at any point in time.
vim.keymap.set({ 'n', 'i', 's' }, '<c-l>', '<cmd>LuaSnipUnlinkCurrent<cr>')
-- Allow toggling autoexpansion on and off. This is more or less the intended
-- approach: https://github.com/L3MON4D3/LuaSnip/issues/832#issuecomment-1474993417
luasnip.expand_auto_on = true
local expand_auto = luasnip.expand_auto
local toggle_expand_auto = function()
if luasnip.expand_auto_on then
luasnip.expand_auto = function() end
else
luasnip.expand_auto = expand_auto
end
luasnip.expand_auto_on = not luasnip.expand_auto_on
end
toggle_expand_auto()
vim.keymap.set({ 'n', 'i', 's' }, '', toggle_expand_auto)
end
return M