.dotfiles/.config/nvim/lua/snippets.lua
2025-06-14 01:49:13 +03:00

95 lines
1.9 KiB
Lua

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 extras = require("luasnip.extras")
local l = extras.lambda
local rep = extras.rep
local p = extras.partial
local m = extras.match
local n = extras.nonempty
local dl = extras.dynamic_lambda
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local conds = require("luasnip.extras.expand_conditions")
local postfix = require("luasnip.extras.postfix").postfix
local types = require("luasnip.util.types")
local parse = require("luasnip.util.parser").parse_snippet
local ms = ls.multi_snippet
local k = require("luasnip.nodes.key_indexer").new_key
-- lua snippets
ls.add_snippets("lua", {
s(
"lreq",
fmt('local {name} = require("{mod}{rep}")', {
name = i(1, "name"),
rep = rep(1),
mod = i(2),
})
),
})
-- js/ts/sx snippets
local allJsFts = {
"javascript",
"typescript",
"typescriptreact",
"javascriptreact",
}
local tsFts = {
"typescriptreact",
"typescript",
}
local import = s(
"im",
fmt("import {name} from '{module}';", {
module = i(1),
name = c(2, { i(1), fmt("{{{}}}", { i(1) }) }),
})
)
local field = s(
"fi",
fmt("{name}: {type};", {
name = i(1),
type = i(2),
})
)
local constF = s(
"cf",
fmt(
[[{export}const {name}{type} = ({args}){ret} => {{
{body}
}}]],
{
export = c(1, { t("export "), i(1) }),
name = i(2),
type = i(3),
args = i(3),
ret = i(4),
body = i(5),
}
)
)
for _, ft in ipairs(tsFts) do
ls.add_snippets(ft, {
constF,
field,
})
end
for _, ft in ipairs(allJsFts) do
ls.add_snippets(ft, {
import,
})
end