|
|
|
@ -42,109 +42,6 @@ ls.config.set_config({
|
|
|
|
|
enable_autosnippets = true,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- args is a table, where 1 is the text in Placeholder 1, 2 the text in
|
|
|
|
|
-- placeholder 2,...
|
|
|
|
|
local function copy(args)
|
|
|
|
|
return args[1]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 'recursive' dynamic snippet. Expands to some text followed by itself.
|
|
|
|
|
local rec_ls
|
|
|
|
|
rec_ls = function()
|
|
|
|
|
return sn(
|
|
|
|
|
nil,
|
|
|
|
|
c(1, {
|
|
|
|
|
-- Order is important, sn(...) first would cause infinite loop of expansion.
|
|
|
|
|
t(""),
|
|
|
|
|
sn(nil, { t({ "", "", "\t\\item " }), i(1), d(2, rec_ls, {}) }),
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- complicated function for dynamicNode.
|
|
|
|
|
local function jdocsnip(args, _, old_state)
|
|
|
|
|
local nodes = {
|
|
|
|
|
t({ "/**", " * " }),
|
|
|
|
|
i(1, "A short Description"),
|
|
|
|
|
t({ "", "" }),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- These will be merged with the snippet; that way, should the snippet be updated,
|
|
|
|
|
-- some user input eg. text can be referred to in the new snippet.
|
|
|
|
|
local param_nodes = {}
|
|
|
|
|
|
|
|
|
|
if old_state then
|
|
|
|
|
nodes[2] = i(1, old_state.descr:get_text())
|
|
|
|
|
end
|
|
|
|
|
param_nodes.descr = nodes[2]
|
|
|
|
|
|
|
|
|
|
-- At least one param.
|
|
|
|
|
if string.find(args[2][1], ", ") then
|
|
|
|
|
vim.list_extend(nodes, { t({ " * ", "" }) })
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local insert = 2
|
|
|
|
|
for indx, arg in ipairs(vim.split(args[2][1], ", ", true)) do
|
|
|
|
|
-- Get actual name parameter.
|
|
|
|
|
arg = vim.split(arg, " ", true)[2]
|
|
|
|
|
if arg then
|
|
|
|
|
local inode
|
|
|
|
|
-- if there was some text in this parameter, use it as static_text for this new snippet.
|
|
|
|
|
if old_state and old_state[arg] then
|
|
|
|
|
inode = i(insert, old_state["arg" .. arg]:get_text())
|
|
|
|
|
else
|
|
|
|
|
inode = i(insert)
|
|
|
|
|
end
|
|
|
|
|
vim.list_extend(
|
|
|
|
|
nodes,
|
|
|
|
|
{ t({ " * @param " .. arg .. " " }), inode, t({ "", "" }) }
|
|
|
|
|
)
|
|
|
|
|
param_nodes["arg" .. arg] = inode
|
|
|
|
|
|
|
|
|
|
insert = insert + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if args[1][1] ~= "void" then
|
|
|
|
|
local inode
|
|
|
|
|
if old_state and old_state.ret then
|
|
|
|
|
inode = i(insert, old_state.ret:get_text())
|
|
|
|
|
else
|
|
|
|
|
inode = i(insert)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
vim.list_extend(
|
|
|
|
|
nodes,
|
|
|
|
|
{ t({ " * ", " * @return " }), inode, t({ "", "" }) }
|
|
|
|
|
)
|
|
|
|
|
param_nodes.ret = inode
|
|
|
|
|
insert = insert + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if vim.tbl_count(args[3]) ~= 1 then
|
|
|
|
|
local exc = string.gsub(args[3][2], " throws ", "")
|
|
|
|
|
local ins
|
|
|
|
|
if old_state and old_state.ex then
|
|
|
|
|
ins = i(insert, old_state.ex:get_text())
|
|
|
|
|
else
|
|
|
|
|
ins = i(insert)
|
|
|
|
|
end
|
|
|
|
|
vim.list_extend(
|
|
|
|
|
nodes,
|
|
|
|
|
{ t({ " * ", " * @throws " .. exc .. " " }), ins, t({ "", "" }) }
|
|
|
|
|
)
|
|
|
|
|
param_nodes.ex = ins
|
|
|
|
|
insert = insert + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
vim.list_extend(nodes, { t({ " */" }) })
|
|
|
|
|
|
|
|
|
|
local snip = sn(nil, nodes)
|
|
|
|
|
-- Error on attempting overwrite.
|
|
|
|
|
snip.old_state = param_nodes
|
|
|
|
|
return snip
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Make sure to not pass an invalid command, as io.popen() may write over nvim-text.
|
|
|
|
|
local function bash(_, _, command)
|
|
|
|
|
local file = io.popen(command, "r")
|
|
|
|
@ -157,7 +54,7 @@ end
|
|
|
|
|
|
|
|
|
|
-- Returns a snippet_node wrapped around an insert_node whose initial
|
|
|
|
|
-- text value is set to the current date in the desired format.
|
|
|
|
|
local date_input = function(args, state, fmt)
|
|
|
|
|
local function date_input(fmt)
|
|
|
|
|
local fmt = fmt or "%Y-%m-%d"
|
|
|
|
|
return sn(nil, i(1, os.date(fmt)))
|
|
|
|
|
end
|
|
|
|
@ -425,55 +322,6 @@ ls.snippets = {
|
|
|
|
|
fmt("use {} only", { t("this"), t("not this") }, { strict = false })
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
tex = {
|
|
|
|
|
-- rec_ls is self-referencing. That makes this snippet 'infinite' eg. have as many
|
|
|
|
|
-- \item as necessary by utilizing a choiceNode.
|
|
|
|
|
s("ls", {
|
|
|
|
|
t({ "\\begin{itemize}", "\t\\item " }),
|
|
|
|
|
i(1),
|
|
|
|
|
t({ "" }),
|
|
|
|
|
d(2, rec_ls, {}),
|
|
|
|
|
t({ "", "\\end{itemize}", "" }),
|
|
|
|
|
}),
|
|
|
|
|
s("lsra", {
|
|
|
|
|
t({ "\\begin{itemize}[label=$\\rightarrow$]", "\t\\item " }),
|
|
|
|
|
i(1),
|
|
|
|
|
t({ "" }),
|
|
|
|
|
d(2, rec_ls, {}),
|
|
|
|
|
t({ "", "\\end{itemize}", "" }),
|
|
|
|
|
}),
|
|
|
|
|
s("frm", {
|
|
|
|
|
t({ "\\begin{" }),
|
|
|
|
|
i(1),
|
|
|
|
|
t({ "}[" }),
|
|
|
|
|
i(2),
|
|
|
|
|
t({ "]{" }),
|
|
|
|
|
f(copy, 1),
|
|
|
|
|
t({ ":" }),
|
|
|
|
|
i(3, "foo"),
|
|
|
|
|
t({ "}", "\t" }),
|
|
|
|
|
i(0),
|
|
|
|
|
t({ "", "\\end{" }),
|
|
|
|
|
f(copy, 1),
|
|
|
|
|
t({ "}", "" }),
|
|
|
|
|
}),
|
|
|
|
|
s("env", {
|
|
|
|
|
t({ "\\begin{" }),
|
|
|
|
|
i(1, "foo"),
|
|
|
|
|
t({ "}", "\t" }),
|
|
|
|
|
i(2),
|
|
|
|
|
t({ "", "\\end{" }),
|
|
|
|
|
f(copy,1),
|
|
|
|
|
t({ "}", "" }),
|
|
|
|
|
}),
|
|
|
|
|
s("tikz", {
|
|
|
|
|
t({ "\\begin{center}" }),
|
|
|
|
|
t({ "", "\t\\begin{tikzpicture}[main/.style = {draw,circle}]", "\t\t" }),
|
|
|
|
|
i(1),
|
|
|
|
|
t({ "", "\t\\end{tikzpicture}", "\\end{center}" }),
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- autotriggered snippets have to be defined in a separate table, luasnip.autosnippets.
|
|
|
|
|