aboutsummaryrefslogtreecommitdiffstats
path: root/modules/home.legacy/conf
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-31 16:10:22 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-31 16:10:22 +0100
commitced11224fe6dbce36904b88b98eee75067ae2235 (patch)
tree9bda6809ce291c59d2d2e3819494b2fdfa63d7bf /modules/home.legacy/conf
parentrefactor(modules/git): Migrate and parameterize (diff)
downloadnixos-config-ced11224fe6dbce36904b88b98eee75067ae2235.zip
feat(modules/legacy/nvim/plgs/luasnippets): Use the git config values
Using hard-coded values could result in desyncs.
Diffstat (limited to 'modules/home.legacy/conf')
-rw-r--r--modules/home.legacy/conf/nvim/plgs/luasnip/lua/snippets/all.lua98
1 files changed, 72 insertions, 26 deletions
diff --git a/modules/home.legacy/conf/nvim/plgs/luasnip/lua/snippets/all.lua b/modules/home.legacy/conf/nvim/plgs/luasnip/lua/snippets/all.lua
index c3f75058..f6cb09b0 100644
--- a/modules/home.legacy/conf/nvim/plgs/luasnip/lua/snippets/all.lua
+++ b/modules/home.legacy/conf/nvim/plgs/luasnip/lua/snippets/all.lua
@@ -60,6 +60,52 @@ ls.add_snippets("all", auto_pairs, { type = "snippets", key = "auto_pairs" })
local calculate_comment_string = require("Comment.ft").calculate
local utils = require("Comment.utils")
+local read_git_config = function(config_value)
+ local command = string.format('git config "%s"', config_value)
+ local handle = io.popen(command)
+ if handle == nil then
+ return error(string.format("Failed to call `%s`.", command))
+ end
+ local result = handle:read("*a")
+ handle:close()
+ -- stripped = string.gsub(str, '%s+', '')
+ return string.gsub(result, '\n', '')
+end
+
+local name_to_handle = function(name)
+ -- from: https://stackoverflow.com/a/7615129
+ local split = function(inputstr, sep)
+ local t = {}
+ for str in string.gmatch(inputstr, "([^" .. sep .. "]+)") do
+ table.insert(t, str)
+ end
+ return t
+ end
+
+ local parts = split(name, "%s")
+
+ local output_name = ""
+ if #parts > 2 then
+ for _, val in ipairs(parts) do
+ output_name = string.format("%s%s", output_name, val:sub(1, 1))
+ end
+ elseif #parts == 2 then
+ output_name = string.format("%s%s", parts[1]:sub(1, 1), parts[2])
+ elseif #parts == 1 then
+ output_name = parts[1]
+ else
+ -- parts is 0
+ output_name = "<NoName>"
+ end
+ return string.format("@%s", output_name:lower())
+end
+
+_G.luasnip = {}
+_G.luasnip.vars = {
+ username = function() return name_to_handle(read_git_config("user.name")) end,
+ email = function() return read_git_config("user.email") end,
+}
+
--- Get the comment string {beg,end} table
---@param ctype integer 1 for `line`-comment and 2 for `block`-comment
---@return table comment_strings {begcstring, endcstring}
@@ -71,20 +117,15 @@ local get_cstring = function(ctype)
-- create a `{left, right}` table for it
return { left, right }
end
-_G.luasnip = {}
-_G.luasnip.vars = {
- username = "@soispha",
- email = "soispha@vhack.eu",
-}
--- Options for marks to be used in a TODO comment
---@return table,table: The first table contains a node for the date, the second for the signature
local marks = {
signature = function()
- return t("(" .. _G.luasnip.vars.username .. ")"), t("")
+ return t("(" .. _G.luasnip.vars:username() .. ")"), t("")
end,
date_signature = function()
- return t("<" .. os.date("%Y-%m-%d") .. ">"), t("(" .. _G.luasnip.vars.username .. ")")
+ return t("<" .. os.date("%Y-%m-%d") .. ">"), t("(" .. _G.luasnip.vars:username() .. ")")
end,
date = function()
return t("<" .. os.date("%Y-%m-%d") .. ">"), t("")
@@ -105,9 +146,9 @@ local todo_snippet_nodes = function(alias, opts, mark_function)
f(function()
return get_cstring(opts.ctype)[1] -- get <comment-string[1]>
end),
- t(alias), -- [name-of-comment]
+ t(alias), -- [name-of-comment]
signature_node,
- i(0), -- {comment-text}
+ i(0), -- {comment-text}
date_node,
f(function()
return get_cstring(opts.ctype)[2] -- get <comment-string[2]>
@@ -127,13 +168,18 @@ local todo_snippet = function(context, alias, opts, mark_function)
if not context.trig then
return error("context doesn't include a `trig` key which is mandatory", 2) -- all we need from the context is the trigger
end
- opts.ctype = opts.ctype or 1 -- comment type can be passed in the `opts` table, but if it is not, we have to ensure, it is defined
- local alias_string = alias -- `choice_node` documentation
- context.name = context.name or (alias_string .. " comment") -- generate the `name` of the snippet if not defined
- context.dscr = context.dscr or (alias_string .. " comment with a signature-mark") -- generate the `dscr` if not defined
- context.docstring = context.docstring or (" {1:" .. alias_string .. "}: {3} <{2:mark}>{0} ") -- generate the `docstring` if not defined
+ opts.ctype = opts.ctype or
+ 1 -- comment type can be passed in the `opts` table, but if it is not, we have to ensure, it is defined
+ local alias_string =
+ alias -- `choice_node` documentation
+ context.name = context.name or
+ (alias_string .. " comment") -- generate the `name` of the snippet if not defined
+ context.dscr = context.dscr or
+ (alias_string .. " comment with a signature-mark") -- generate the `dscr` if not defined
+ context.docstring = context.docstring or
+ (" {1:" .. alias_string .. "}: {3} <{2:mark}>{0} ") -- generate the `docstring` if not defined
local comment_node = todo_snippet_nodes(alias, opts, mark_function)
- return s(context, comment_node, opts) -- the final todo-snippet constructed from our parameters
+ return s(context, comment_node, opts) -- the final todo-snippet constructed from our parameters
end
---@param context table: The luasnip context
@@ -153,20 +199,20 @@ local process_marks = function(context, aliases, opts, marks)
end
local todo_snippet_specs = {
- { { trig = "todo" }, { "TODO" }, { ctype = 1 } },
- { { trig = "fix" }, { "FIXME", "ISSUE" }, { ctype = 1 } },
- { { trig = "hack" }, { "HACK" }, { ctype = 1 } },
- { { trig = "warn" }, { "WARNING" }, { ctype = 1 } },
- { { trig = "perf" }, { "PERFORMANCE", "OPTIMIZE" }, { ctype = 1 } },
- { { trig = "note" }, { "NOTE", "INFO" }, { ctype = 1 } },
+ { { trig = "todo" }, { "TODO" }, { ctype = 1 } },
+ { { trig = "fix" }, { "FIXME", "ISSUE" }, { ctype = 1 } },
+ { { trig = "hack" }, { "HACK" }, { ctype = 1 } },
+ { { trig = "warn" }, { "WARNING" }, { ctype = 1 } },
+ { { trig = "perf" }, { "PERFORMANCE", "OPTIMIZE" }, { ctype = 1 } },
+ { { trig = "note" }, { "NOTE", "INFO" }, { ctype = 1 } },
-- NOTE: Block commented todo-comments
- { { trig = "todob" }, { "TODO" }, { ctype = 2 } },
- { { trig = "fixb" }, { "FIXME", "ISSUE" }, { ctype = 2 } },
- { { trig = "hackb" }, { "HACK" }, { ctype = 2 } },
- { { trig = "warnb" }, { "WARNING" }, { ctype = 2 } },
+ { { trig = "todob" }, { "TODO" }, { ctype = 2 } },
+ { { trig = "fixb" }, { "FIXME", "ISSUE" }, { ctype = 2 } },
+ { { trig = "hackb" }, { "HACK" }, { ctype = 2 } },
+ { { trig = "warnb" }, { "WARNING" }, { ctype = 2 } },
{ { trig = "perfb" }, { "PERF", "PERFORMANCE", "OPTIM", "OPTIMIZE" }, { ctype = 2 } },
- { { trig = "noteb" }, { "NOTE", "INFO" }, { ctype = 2 } },
+ { { trig = "noteb" }, { "NOTE", "INFO" }, { ctype = 2 } },
}
local todo_comment_snippets = {}