summaryrefslogtreecommitdiff
path: root/config/essentials/nvim/after/plugin/luasnip.lua
blob: bfedfccf5e3c9d6c7a2f0c6000081459db0a5d25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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 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

-- keymaps
vim.keymap.set({"i", "s"}, "<C-k>", "<Plug>luasnip-expand-or-jump", { noremap = true })
vim.keymap.set({"i", "s"}, "<C-j>", "<Plug>luasnip-jump-prev", { noremap = true })
vim.keymap.set({"i", "s"}, "<C-l>", "<Plug>luasnip-next-choice", { noremap = true })
vim.keymap.set("n", "<leader><leader>s", function()
	ls.cleanup()
	vim.cmd("source ~/.config/nvim/after/plugin/luasnip.lua")
	print("snippets reloaded.")
end, { noremap = true })


local same = function(index)
	return f(function (arg)
		return arg[1]
	end, { index })
end

ls.add_snippets("lua", {
	-- print
	s("pt", {
		t("print(\""),
		i(1, "Hello World!"),
		t("\")"), i(0)
	}),
	-- local function
	parse("lf", "local $1 = function($2)\n\t$3\nend$0", {}),
	-- require
	s("req", fmt("local {} = require('{}')", { i(1), rep(1) })),
	parse("rq", "require('$1')$0", {}),
	-- function
	s("fn", fmt(
		[[
		function {}({})
			{}
		end
		]],
    { i(1), i(2), i(3) }
	), i(0)),
})

ls.add_snippets("html", {
	s("<!DOCTYPE>", {
		t({"<!DOCTYPE html>", "<html lang=\"en\">", "\t<head>", "\t\t<title>"}),
		i(1, "title"),
  		t("</title>"), i(2),
		t({"", "\t</head>", "\t<body>", "\t\t<h1>"}),
		i(3, "Header"),
		t("</h1>"), i(4),
		t({"", "\t</body>", "</html>"}), i(0)
	}),
})

ls.add_snippets("java", {
	s("gfn", fmt(
			[[
				{}static void get_{} () {{
					return this.{};
				}}
			]],
			{ c(1, {t "", t "public ", t "private "}), i(2), rep(2) }
		)),
	s("fn", fmt(
			[[
				{}static {} {} ({}) {{
					{}
					return ({});
				}}
			]],
			{
				c(1, {t "", t "public ", t "private "}),
				i(2, "type"),
				i(3, "\"name\""),
				i(4), i(5),
				rep(2)
			}
		))
})