summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoropalmay <[email protected]>2023-01-28 22:43:44 +0200
committeropalmay <[email protected]>2023-01-28 22:48:23 +0200
commit845522742dbfcdfd6bd83437fc5b5caf6798db60 (patch)
tree32cfc3df094cea9d983b5fa0cb31f117cffd9f89
parentc18cd3f0a89443d4265f6df8ce12fb89d627f09e (diff)
feat(luasnip): setup tables snip
-rw-r--r--lua/lvim/core/luasnip.lua35
-rw-r--r--lua/lvim/plugins.lua15
-rw-r--r--lua/lvim/utils.lua41
3 files changed, 77 insertions, 14 deletions
diff --git a/lua/lvim/core/luasnip.lua b/lua/lvim/core/luasnip.lua
new file mode 100644
index 00000000..4c869da6
--- /dev/null
+++ b/lua/lvim/core/luasnip.lua
@@ -0,0 +1,35 @@
+local M = {}
+local utils = require "lvim.utils"
+local paths = {}
+
+function M.gen_setup_snips()
+ local ls = require "luasnip"
+ local lua_snippets = {
+ -- ls.parser.parse_snippet("cmp", utils.r_inspect_settings(lvim.builtin.cmp, "lvim.builtin.cmp", 10000, ".")),
+ -- ls.parser.parse_snippet("lir", utils.r_inspect_settings(lvim.builtin.lir, "lvim.builtin.lir", 10000, ".")),
+ }
+ for i, v in pairs(lvim.builtin) do
+ lua_snippets[#lua_snippets + 1] =
+ ls.parser.parse_snippet("lvim.builtin." .. i, utils.r_inspect_settings(v, "lvim.builtin." .. i, 10000, "."))
+ end
+ ls.add_snippets("lua", lua_snippets)
+end
+
+function M.setup()
+ 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()
+
+ M.gen_setup_snips()
+end
+
+return M
diff --git a/lua/lvim/plugins.lua b/lua/lvim/plugins.lua
index e1341398..d92828c1 100644
--- a/lua/lvim/plugins.lua
+++ b/lua/lvim/plugins.lua
@@ -67,20 +67,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()
+ require("lvim.core.luasnip").setup()
end,
event = "InsertEnter",
dependencies = {
diff --git a/lua/lvim/utils.lua b/lua/lvim/utils.lua
index 5e49906a..1a4ddb1a 100644
--- a/lua/lvim/utils.lua
+++ b/lua/lvim/utils.lua
@@ -1,6 +1,47 @@
local M = {}
local uv = vim.loop
+function M.r_inspect_settings(structure, base_structure_str, limit, separator)
+ limit = limit or 100 -- default item limit
+ separator = separator or "." -- indent string
+ local output = ""
+ if limit < 1 then
+ return "ERROR: Item limit reached."
+ end
+ if structure == nil then
+ output = output .. "-- O" .. separator:sub(2) .. " = nil\n"
+ return output
+ end
+ local ts = type(structure)
+
+ if ts == "table" then
+ for k, v in pairs(structure) do
+ -- replace non alpha keys with ["key"]
+ if tostring(k):match "[^%a_]" then
+ k = '["' .. tostring(k) .. '"]'
+ end
+ output = output .. M.r_inspect_settings(v, base_structure_str, limit, separator .. "." .. tostring(k))
+ if limit < 0 then
+ break
+ end
+ end
+ return output
+ end
+
+ if ts == "string" then
+ -- escape sequences
+ structure = string.format("%q", structure)
+ end
+ separator = separator:gsub("%.%[", "%[")
+ if type(structure) == "function" then
+ -- don't print functions
+ output = output .. "-- " .. base_structure_str .. separator:sub(2) .. " = function ()\n"
+ else
+ output = output .. base_structure_str .. separator:sub(2) .. " = " .. tostring(structure) .. "\n"
+ end
+ return output
+end
+
-- recursive Print (structure, limit, separator)
local function r_inspect_settings(structure, limit, separator)
limit = limit or 100 -- default item limit