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
|
local M = {}
function M.config()
lvim.builtin.luasnip = {
sources = {
friendly_snippets = true,
lunarvim = true,
},
config = {
history = false,
updateevents = "TextChanged,TextChangedI",
ext_opts = {
-- Will be populated within config function
},
},
}
end
function M.setup()
local utils = require "lvim.utils"
local paths = {}
if lvim.builtin.luasnip.sources.friendly_snippets then
paths[#paths + 1] = utils.join_paths(get_runtime_dir(), "site", "pack", "packer", "start", "friendly-snippets")
end
local user_snippets = utils.join_paths(get_config_dir(), "snippets")
if utils.is_directory(user_snippets) then
paths[#paths + 1] = user_snippets
end
-- When no paths are provided, luasnip will search in the runtimepath
require("luasnip.loaders.from_lua").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load {
paths = paths,
}
require("luasnip.loaders.from_snipmate").lazy_load()
local luasnip = require "luasnip"
local types = require "luasnip.util.types"
local ext_opts = {
-- Show virtual text to signal when you are inside an sippets
[types.insertNode] = {
active = {
virt_text = { { "<-- snip insert", "BufferInactiveIndex" } },
},
},
-- Helps to notice when you are within a choice node
[types.choiceNode] = {
active = {
virt_text = { { "<-- choice", "BufferInactiveIndex" } },
},
},
}
-- Add lunarvim options giving preference to user ones
lvim.builtin.luasnip.config.ext_opts = vim.tbl_deep_extend("keep", lvim.builtin.luasnip.config.ext_opts, ext_opts)
luasnip.config.set_config(lvim.builtin.luasnip.config)
if lvim.builtin.luasnip.sources.lunarvim then
luasnip.add_snippets("lua", require "lvim.core.luasnip.snippets")
end
end
return M
|