diff --git a/lua/user/luasnip.lua b/lua/user/luasnip.lua new file mode 100644 index 0000000..e805ed0 --- /dev/null +++ b/lua/user/luasnip.lua @@ -0,0 +1,141 @@ +local status_ok, ls = pcall(require, "luasnip") +if not status_ok then + return +end + +require("luasnip/loaders/from_vscode").lazy_load() + +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_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 events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet + +vim.keymap.set({ "i", "s" }, "", function() + if ls.expand_or_jumpable() then + ls.expand_or_jump() + end +end, { silent = true }) + +vim.keymap.set({ "i", "s" }, "", function() + if ls.jumpable(-1) then + ls.jump(-1) + end +end, { silent = true }) + +vim.keymap.set({ "i" }, "", function() + if ls.choice_active() then + ls.change_choice(1) + end +end) + +vim.keymap.set({ "i" }, "", function() + if ls.choice_active() then + ls.change_choice(-1) + end +end) + +ls.config.set_config({ + -- This tells LuaSnip to remember to keep around the last snippet. + -- You can jump back into it even if you move outside of the selection + history = true, + -- This one is cool cause if you have dynamic snippets, it updates as you type! + updateevents = "TextChanged,TextChangedI", + -- Autosnippets: + enable_autosnippets = true, + -- Crazy highlights!! + ext_opts = { + [types.choiceNode] = { + active = { + virt_text = { { " « ", "NonTest" } }, + }, + }, + }, +}) + +local get_year = function() + return os.date("%Y") +end + +local get_date = function() + return os.date("%d.%m.%Y") +end + +local same = function(index) + return f(function(arg) + return arg[1] + end, { index }) +end + +ls.add_snippets(nil, { + all = {}, + lua = {}, + rust = {}, + python = {}, + cpp = { + s( + "copy", + fmt( + [[ + // Copyright {} + // Author - Kristiāns Francis Cagulis, kc22015 + // {} + // Programma izveidota: {} + ]], + { + get_year(), + i(1), + get_date(), + } + ) + ), + s( + "fn", + fmt( + [[ + // {}; + // funkcija {}({}) - + // {} + {} {{ + }} + ]], + { + same(1), + f(function(function_name) + if not function_name[1][1] then + function_name[1][1] = "" + end + local words = {} + for word in function_name[1][1]:gmatch("%w+") do + table.insert(words, word) + end + return words[2] or "" + end, { 1 }), + i(2), + i(0), + i(1), + } + ) + ), + }, +})