summaryrefslogtreecommitdiff
path: root/neovim/lua/vimrc/snippets.lua
diff options
context:
space:
mode:
Diffstat (limited to 'neovim/lua/vimrc/snippets.lua')
-rw-r--r--neovim/lua/vimrc/snippets.lua133
1 files changed, 133 insertions, 0 deletions
diff --git a/neovim/lua/vimrc/snippets.lua b/neovim/lua/vimrc/snippets.lua
new file mode 100644
index 0000000..e4d60d7
--- /dev/null
+++ b/neovim/lua/vimrc/snippets.lua
@@ -0,0 +1,133 @@
+local ls = require "luasnip"
+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 fmt = require("luasnip.extras.fmt").fmt
+local m = require("luasnip.extras").m
+local lambda = require("luasnip.extras").l
+local postfix = require("luasnip.extras.postfix").postfix
+
+local map = vim.api.nvim_set_keymap
+
+local M = {}
+
+local go_snippets = function()
+ ls.add_snippets("go", {
+
+ s(";r", fmt([[
+ <>, err := <>
+ if err != nil {
+ <>
+ }
+ ]], {
+ i(1,"ret"), i(2,"fun"), i(3, "return err")
+ }, {
+ delimiters = "<>"
+ })),
+
+ s(";e", fmt([[
+ if <>, <> := <>; <> {
+ <>
+ }
+ ]], {
+ i(1,"v"),i(2,"err"),i(3,"fun"), i(4, "err != nil"), i(5,"return err")
+ }, {
+ delimiters = "<>"
+ })),
+
+ s(";fr", fmt([[
+ for <>, <> := range <> {
+ <>
+ }
+ ]], {
+ i(1,"_"),i(2,"_"), i(3,"iterable"), i(4,"body")
+ }, {
+ delimiters = "<>"
+ })),
+
+ s(";sj", fmt([[
+ <> <> `json:"<>"`
+ ]], {
+ i(1,"field"),i(2,"type"), d(3, function(args)
+ for i, line in pairs(args[1]) do
+ args[1][i] = line:gsub("(%u)", function(ch) return '_' .. ch:lower() end):gsub("^_", '')
+ end
+ return sn(nil, {i(1,args[1])})
+ end,
+ {1})
+ }, {
+ delimiters = "<>"
+ })),
+
+ s(";test", fmt([[
+func Test<>(t *testing.T) {
+ for i, c := range []struct {
+ expected <>
+ }{
+ } {
+ t.Run(fmt.Sprintf("%d %s", i, c.expected), func(t *testing.T) {
+ <>
+ })
+ }
+}
+ ]], {
+ i(1,"test"),i(2,"type"), i(3,"body")
+ }, {
+ delimiters = "<>"
+ })),
+
+
+
+ })
+end
+
+
+function M.setup()
+ go_snippets()
+ ls.config.setup({
+ load_ft_func =
+ -- Also load both lua and json when a markdown-file is opened,
+ -- javascript for html.
+ -- Other filetypes just load themselves.
+ require("luasnip.extras.filetype_functions").extend_load_ft({
+ markdown = { "lua", "json" },
+ html = { "javascript" }
+ })
+ })
+ -- press <Tab> to expand or jump in a snippet. These can also be mapped separately
+ -- via <Plug>luasnip-expand-snippet and <Plug>luasnip-jump-next.
+ vim.keymap.set(
+ "i",
+ "<Tab>",
+ [[luasnip#expand_or_jumpable() ? '<Plug>luasnip-expand-or-jump' : '<Tab>']],
+ { silent = true, noremap = true, expr = true }
+ )
+ vim.keymap.set(
+ { "i", "s" },
+ "<S-Tab>",
+ [[<cmd>lua require'luasnip'.jump(-1)<CR>]],
+ { silent = true, noremap = true }
+ )
+ vim.keymap.set(
+ "s",
+ "<Tab>",
+ [[<cmd>lua require'luasnip'.jump(1)<CR>]],
+ { silent = true, noremap = true }
+ )
+ vim.keymap.set(
+ { "i", "s" },
+ "<C-E>",
+ [[luasnip#choice_active() ? '<Plug>luasnip-next-choice' : '<C-E>']],
+ { silent = true, noremap = true, expr = true }
+ )
+end
+
+return M