diff options
-rw-r--r-- | lua/lvim/config/init.lua | 12 | ||||
-rw-r--r-- | lua/lvim/core/builtins/init.lua | 1 | ||||
-rw-r--r-- | lua/lvim/core/luasnip/init.lua | 58 | ||||
-rw-r--r-- | lua/lvim/core/luasnip/snippets.lua | 36 | ||||
-rw-r--r-- | lua/lvim/plugins.lua | 27 |
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 = { |