aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hm/soispha/conf/nvim/plugins/luasnip/lua/snippets/all.lua62
1 files changed, 26 insertions, 36 deletions
diff --git a/hm/soispha/conf/nvim/plugins/luasnip/lua/snippets/all.lua b/hm/soispha/conf/nvim/plugins/luasnip/lua/snippets/all.lua
index 8e3a409b..d73ce7ae 100644
--- a/hm/soispha/conf/nvim/plugins/luasnip/lua/snippets/all.lua
+++ b/hm/soispha/conf/nvim/plugins/luasnip/lua/snippets/all.lua
@@ -1,3 +1,5 @@
+local ls = require("luasnip");
+-- auto_pairs {{{
local get_visual = function(args, parent)
if #parent.snippet.env.SELECT_RAW > 0 then
return sn(nil, i(1, parent.snippet.env.SELECT_RAW))
@@ -14,56 +16,44 @@ local function char_count_same(c1, c2)
return ct1 == ct2
end
-local function even_count(c)
+local function even_count(c, ...)
local line = vim.api.nvim_get_current_line()
local _, ct = string.gsub(line, c, "")
return ct % 2 == 0
end
-local function neg(fn, ...)
- return not fn(...)
-end
-
-local function part(fn, ...)
- local args = { ...; }
- return function()
- return fn(unpack(args))
- end
-end
-
-- This makes creation of pair-type snippets easier.
-local function pair(pair_begin, pair_end, expand_func, ...)
- -- triggerd by opening part of pair, wordTrig=false to trigger anywhere.
- -- ... is used to pass any args following the expand_func to it.
+local function pair(pair_begin, pair_end, file_types, condition_function)
+ -- FIXME(@Soispha): This only works if file_types == nil, otherwise the snippet does not expand.
+ -- It would be nice, if it would support both an empty array (`{}`) and nil <2023-08-27>
+ -- file_types = file_types or {};
+
return s(
{ trig = pair_begin; wordTrig = false; snippetType = "autosnippet"; },
{ t({ pair_begin; }); d(1, get_visual); t({ pair_end; }); },
- { condition = part(expand_func, part(..., pair_begin, pair_end)); }
+ {
+ condition = function()
+ local filetype_check = true;
+ if file_types ~= nil then
+ filetype_check = file_types[vim.bo.filetype] or false;
+ end;
+ return (not condition_function(pair_begin, pair_end)) and filetype_check
+ end;
+ }
)
end
-local maybe = { pair = nil; }
-if vim.bo.filetype == "tex" then
- maybe.pair = pair("<", ">", neg, char_count_same)
-end
-
local auto_pairs = {
- pair("(", ")", neg, char_count_same);
- pair("{", "}", neg, char_count_same);
- pair("[", "]", neg, char_count_same);
- pair("'", "'", neg, even_count);
- pair('"', '"', neg, even_count);
- pair("`", "`", neg, even_count);
+ pair("(", ")", nil, char_count_same);
+ pair("{", "}", nil, char_count_same);
+ pair("[", "]", nil, char_count_same);
+ pair("<", ">", { ["rust"] = true; ["tex"] = true; }, char_count_same);
+ pair("'", "'", nil, even_count);
+ pair('"', '"', nil, even_count);
+ pair("`", "`", nil, even_count);
}
-auto_pairs[#auto_pairs + 1] = maybe.pair
-local todo_comments = {
- s({ trig = "fix"; }, t("FIXME(@Soispha): "));
- s({ trig = "todo"; }, t("TODO(@Soispha): "));
- s({ trig = "note"; }, t("NOTE(@Soispha): "));
-};
+ls.add_snippets("all", auto_pairs, { type = "snippets"; key = "auto_pairs"; })
+-- }}}
--- merge the output tables together
-for k, v in pairs(auto_pairs) do todo_comments[k] = v end
-return todo_comments