99 lines
3.1 KiB
Lua

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" }, "<C-K>", function()
vim.keymap.set({ "i", "s" }, "<Tab>", 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" }, "<C-J>", function()
vim.keymap.set({ "i", "s" }, "<S-Tab>", 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" }, "<C-L>", function()
vim.keymap.set({ "i" }, "<A-Tab>", 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", "<leader><leader>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)
})
),
}
})