summaryrefslogtreecommitdiff
path: root/lua/lvim
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lvim')
-rw-r--r--lua/lvim/config/init.lua12
-rw-r--r--lua/lvim/core/builtins/init.lua1
-rw-r--r--lua/lvim/core/luasnip/init.lua58
-rw-r--r--lua/lvim/core/luasnip/snippets.lua36
-rw-r--r--lua/lvim/plugins.lua27
5 files changed, 96 insertions, 38 deletions
diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua
index 661771f6..55876a54 100644
--- a/lua/lvim/config/init.lua
+++ b/lua/lvim/config/init.lua
@@ -29,18 +29,6 @@ function M:init()
local lvim_lsp_config = require "lvim.lsp.config"
lvim.lsp = vim.deepcopy(lvim_lsp_config)
- lvim.builtin.luasnip = {
- sources = {
- friendly_snippets = true,
- },
- config = {
- updateevents = "TextChanged,TextChangedI",
- ext_opts = {
- -- Will be populated within config function
- },
- },
- }
-
lvim.builtin.bigfile = {
active = true,
config = {},
diff --git a/lua/lvim/core/builtins/init.lua b/lua/lvim/core/builtins/init.lua
index 4764ff70..a153a8a7 100644
--- a/lua/lvim/core/builtins/init.lua
+++ b/lua/lvim/core/builtins/init.lua
@@ -21,6 +21,7 @@ local builtins = {
"lvim.core.lualine",
"lvim.core.alpha",
"lvim.core.mason",
+ "lvim.core.luasnip",
}
function M.config(config)
diff --git a/lua/lvim/core/luasnip/init.lua b/lua/lvim/core/luasnip/init.lua
new file mode 100644
index 00000000..8b2fc0aa
--- /dev/null
+++ b/lua/lvim/core/luasnip/init.lua
@@ -0,0 +1,58 @@
+local M = {}
+function M.config()
+ lvim.builtin.luasnip = {
+ sources = {
+ friendly_snippets = true,
+ lunarvim = true,
+ },
+ config = {
+ 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
+ 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
diff --git a/lua/lvim/core/luasnip/snippets.lua b/lua/lvim/core/luasnip/snippets.lua
new file mode 100644
index 00000000..0e2ba5bb
--- /dev/null
+++ b/lua/lvim/core/luasnip/snippets.lua
@@ -0,0 +1,36 @@
+---@diagnostic disable: unused-local for convenience is better to have all luasnip methods available
+-- About how to create snippets:
+-- https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md
+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 extras = require "luasnip.extras"
+local m = extras.m
+local l = extras.l
+local dl = extras.dynamic_lambda
+local rep = extras.rep
+local postfix = require("luasnip.extras.postfix").postfix
+
+return {
+ s(
+ { trig = "preq", dscr = "Protected require call" },
+ fmt(
+ [[
+ local ok, {} = pcall(require,'{}')
+ if not ok then
+ return
+ end]],
+ { i(1), dl(2, "lvim.core." .. l._1, 1) }
+ )
+ ),
+}
diff --git a/lua/lvim/plugins.lua b/lua/lvim/plugins.lua
index 8db68d0e..c3064f5c 100644
--- a/lua/lvim/plugins.lua
+++ b/lua/lvim/plugins.lua
@@ -76,32 +76,7 @@ local core_plugins = {
{
"L3MON4D3/LuaSnip",
config = function()
- 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", "lazy", "opt", "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
- 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 = {
- [types.insertNode] = {
- active = {
- virt_text = { { "<-- snip insert", "BufferInactiveIndex" } },
- },
- },
- }
- vim.tbl_deep_extend(lvim.builtin.config.ext_opts, ext_opts)
- luasnip.config.set_config(lvim.builtin.luasnip.config)
+ require("lvim.core.luasnip").setup()
end,
event = "InsertEnter",
dependencies = {