diff options
author | opalmay <[email protected]> | 2023-02-02 18:59:28 +0200 |
---|---|---|
committer | opalmay <[email protected]> | 2023-02-06 21:40:05 +0200 |
commit | 211dac874528c6a7191fd9b540eea61e2540adec (patch) | |
tree | 936b43c4afe6382feb271dd13c5622c7abb65e8d /lua/lvim/core | |
parent | ca73f0ae11137b02f7a1b386fb81bf0aa0be780c (diff) |
rebase
Diffstat (limited to 'lua/lvim/core')
-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 |
3 files changed, 95 insertions, 0 deletions
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) } + ) + ), +} |