local misc = require('core.misc') local map = misc.map return { 'L3MON4D3/LuaSnip', branch = 'v2.3.0', disable = vim.version().minor < 7, config = function() vim.cmd.make('install_jsregexp') end, function() local luasnip = require('luasnip') local types = require("luasnip.util.types") luasnip.config.set_config { history = true, -- return back into snippet -- update on text insert and cursor hold updateevents = { "TextChanged", "TextChangedI", "CursorHold" }, ext_opts = { [types.choiceNode] = { active = { virt_text = {{ "●", "@boolean" }} } }, [types.insertNode] = { active = { virt_text = {{ "●", "@constant" }} } }, }, } map({"i", "s"}, "", function() if luasnip.choice_active() then luasnip.change_choice(1) end end) map({"i", "s"}, "", function() if luasnip.expandable() then luasnip.expand() end end) map({"i", "s"}, "", function() if luasnip.jumpable(1) then luasnip.jump(1) end end) map({"i", "s"}, "", function() if luasnip.jumpable(-1) then luasnip.jump(-1) end end) -- load all snippets from snippet directory for _, file in ipairs(vim.api.nvim_get_runtime_file("lua/snippets/*.lua", true)) do local fn = file:gsub('^.*/', ''):gsub('%.lua$', '') local ret = misc.include('snippets.'..fn) if type(ret) ~= "boolean" then luasnip.add_snippets(fn, ret, { key = fn }) end end end }