diff options
Diffstat (limited to 'lua/pi/snips/ft/lua.lua')
| -rw-r--r-- | lua/pi/snips/ft/lua.lua | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lua/pi/snips/ft/lua.lua b/lua/pi/snips/ft/lua.lua new file mode 100644 index 0000000..d896f3e --- /dev/null +++ b/lua/pi/snips/ft/lua.lua @@ -0,0 +1,69 @@ +local ls = require "luasnip" + +-- local snippet = ls.s +local snippet_from_nodes = ls.sn +local c = ls.choice_node +local d = ls.dynamic_node +local i = ls.insert_node +local f = ls.function_node +local t = ls.text_node + +local fmt = require("luasnip.extras.fmt").fmt + +local require_var = function(args, _) + local text = args[1][1] or "" + local split = vim.split(text, ".", { plain = true }) + + local options = {} + for len = 0, #split - 1 do + table.insert(options, t(table.concat(vim.list_slice(split, #split - len, #split), "_"))) + end + + return snippet_from_nodes(nil, { + c(1, options), + }) +end + +local newline = function(text) + return t { "", text } +end + +return { + req = fmt([[local {} = require("{}")]], { + d(2, require_var, { 1 }), + i(1), + }), + lf = { + desc = "table function", + "local ", + i(1), + " = function(", + i(2), + ")", + newline " ", + i(0), + newline "end", + }, + + preq = fmt( + [[local ok, {} = pcall(require, "{}") +if not ok then + return +end]], + { + f(function(args) + return args[1][1] + end, { 1 }), + i(1), + } + ), + + plugin = fmt( + [[return {{ + "{}" +}}]], + { + i(1, "plugin"), + } + ), +} |