local ls = require("luasnip") local fmt = require('luasnip.extras.fmt') local rep = require('luasnip.extras').rep -- some shorthands... -- Taken from video/guide. Honestly I don't like these should probably work on learning their names local s = ls.snippet local sn = ls.snippet_node local t = ls.text_node local i = ls.insert_node local f = ls.function_node local c = ls.choice_node local d = ls.dynamic_node local r = ls.restore_node local l = require("luasnip.extras").lambda local rep = require("luasnip.extras").rep local p = require("luasnip.extras").partial local m = require("luasnip.extras").match local n = require("luasnip.extras").nonempty local dl = require("luasnip.extras").dynamic_lambda local fmt = require("luasnip.extras.fmt").fmt local fmta = require("luasnip.extras.fmt").fmta local types = require("luasnip.util.types") local conds = require("luasnip.extras.conditions") local conds_expand = require("luasnip.extras.conditions.expand") ls.config.set_config { history = true, -- This allows dynamic snippets to update as you type updateevents = "TextChanged,TextChangedI" } -- Expand if expandable, or jump forward if jumpable -- If neither, do nothing queitly -- vim.keymap.set({ "i", "s" }, "", function() vim.keymap.set({ "i", "s" }, "", function() if ls.expand_or_jumpable() then ls.expand_or_jump() end end, { silent = true }) -- end, { silent = true }) -- Jump backwards to the previous jumpable point -- vim.keymap.set({ "i", "s" }, "", function() vim.keymap.set({ "i", "s" }, "", function() if ls.jumpable(-1) then ls.jump(-1) end end, { silent = true }) -- Selecting from a list of options in a choice node -- vim.keymap.set({ "i" }, "", function() vim.keymap.set({ "i" }, "", function() if ls.choice_active() then ls.change_choice(1) end end) -- Allow us to hot reload snippets by unloading snippets then resourcing file local ls_cleanup = function() ls.cleanup() vim.cmd("source ~/.config/nvim/lua/user/luasnip.lua") end vim.keymap.set("n", "s", ls_cleanup) ls.add_snippets(nil, { terraform = { ls.parser.parse_snippet("res", "resource \"$1\" \"$2\" {\n $3\n}"), ls.parser.parse_snippet("dat", "data \"$1\" \"$2\" {\n $3\n}"), ls.parser.parse_snippet("var", "variable \"$1\" {\n type = $2\n description = $3\n}"), ls.parser.parse_snippet("loc", "locals {\n $1\n}"), ls.parser.parse_snippet("mod", "module {\n source = $1\n}"), }, lua = { ls.parser.parse_snippet("expand", "-- this is what was expanded!"), ls.parser.parse_snippet("lf", "local $1 = function($2)\n $0\nend"), ls.parser.parse_snippet("mf", "$1.$2 = function($3)\n $0\nend"), -- Example from snippet writing guide: https://github.com/L3MON4D3/LuaSnip/blob/master/Examples/snippets.lua#L190 s( "fmt1", fmt("To {title} {} {}.", { i(2, "Name"), i(3, "Surname"), title = c(1, { t("Mr."), t("Ms.") }), }) ), -- Example from video: https://www.youtube.com/watch?v=Dn800rlPIho s( "req", fmt("local {} = require('{}')", { i(1, "default"), rep(1) }) ), } })