feat: improve luasnip
This commit is contained in:
parent
85bab070c6
commit
22a6b5156c
9 changed files with 115 additions and 67 deletions
|
|
@ -1,46 +0,0 @@
|
|||
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
|
||||
|
||||
local def_template = [[
|
||||
def {fname}({args}) do
|
||||
{final}
|
||||
end
|
||||
]]
|
||||
|
||||
local def = s(
|
||||
"def",
|
||||
fmt(def_template, {
|
||||
fname = i(1, "fname"),
|
||||
args = i(2),
|
||||
final = i(3),
|
||||
}, { priority = 1001 })
|
||||
)
|
||||
|
||||
return {
|
||||
def,
|
||||
}
|
||||
|
|
@ -1,120 +0,0 @@
|
|||
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
|
||||
local matches = require("luasnip.extras.postfix").matches
|
||||
|
||||
local case_template = [[
|
||||
case {expression} {{
|
||||
{pattern1} -> {result1}
|
||||
{pattern2} -> {result2}{final}
|
||||
}}
|
||||
]]
|
||||
|
||||
local dot_case = postfix({ filetype = "gleam", trig = ".case", match_pattern = matches.line }, {
|
||||
d(1, function(_, parent)
|
||||
return sn(
|
||||
1,
|
||||
fmt(case_template, {
|
||||
expression = t(parent.env.POSTFIX_MATCH),
|
||||
pattern1 = i(1, "pattern"),
|
||||
result1 = i(2, "todo"),
|
||||
pattern2 = i(3, "_"),
|
||||
result2 = i(4, "todo"),
|
||||
final = i(0),
|
||||
})
|
||||
)
|
||||
end),
|
||||
})
|
||||
|
||||
local case = s(
|
||||
{ filetype = "gleam", trig = "case" },
|
||||
fmt(case_template, {
|
||||
expression = i(1),
|
||||
pattern1 = i(2),
|
||||
result1 = i(3, "todo"),
|
||||
pattern2 = i(4, "_"),
|
||||
result2 = i(5, "todo"),
|
||||
final = i(0),
|
||||
})
|
||||
)
|
||||
|
||||
local fn_template = [[
|
||||
fn {name}({args}) -> {rtype} {{
|
||||
{body}
|
||||
}}
|
||||
]]
|
||||
|
||||
local fn = s(
|
||||
{ filetype = "gleam", trig = "fn" },
|
||||
fmt(fn_template, {
|
||||
name = i(1),
|
||||
args = i(2),
|
||||
rtype = i(3),
|
||||
body = i(0),
|
||||
})
|
||||
)
|
||||
|
||||
local pfn = s(
|
||||
{ filetype = "gleam", trig = "pfn" },
|
||||
fmt("pub " .. fn_template, {
|
||||
name = i(1),
|
||||
args = i(2),
|
||||
rtype = i(3),
|
||||
body = i(0),
|
||||
})
|
||||
)
|
||||
|
||||
local type_template = [[
|
||||
type {name} {{
|
||||
{body}
|
||||
}}
|
||||
]]
|
||||
|
||||
local type = s(
|
||||
{ filetype = "gleam", trig = "type" },
|
||||
fmt(type_template, {
|
||||
name = i(1),
|
||||
body = i(0),
|
||||
})
|
||||
)
|
||||
|
||||
local ptype = s(
|
||||
{ filetype = "gleam", trig = "ptype" },
|
||||
fmt("pub " .. type_template, {
|
||||
name = i(1),
|
||||
body = i(0),
|
||||
})
|
||||
)
|
||||
|
||||
return {
|
||||
case,
|
||||
dot_case,
|
||||
fn,
|
||||
pfn,
|
||||
type,
|
||||
ptype,
|
||||
}
|
||||
|
|
@ -1,138 +0,0 @@
|
|||
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
|
||||
|
||||
local pe = s(
|
||||
"pe",
|
||||
fmt("<%= {final} %>", {
|
||||
final = i(1),
|
||||
}, { priority = 1001 })
|
||||
)
|
||||
|
||||
local ln = s(
|
||||
"ln",
|
||||
fmt(
|
||||
[[
|
||||
<.link navigate={{~p"{path}"}}">{final}</.link>
|
||||
]],
|
||||
{ path = i(1, "/"), final = i(2) },
|
||||
{ priority = 1001 }
|
||||
)
|
||||
)
|
||||
|
||||
local lp = s(
|
||||
"lp",
|
||||
fmt(
|
||||
[[
|
||||
<.link patch={{~p"{path}"}}">{final}</.link>
|
||||
]],
|
||||
{ path = i(1, "/"), final = i(2) },
|
||||
{ priority = 1001 }
|
||||
)
|
||||
)
|
||||
|
||||
local if_ = s(
|
||||
"if",
|
||||
fmt("<%= if {condition} do %>{final}<% end %>", { condition = i(1, "condition"), final = i(2) }, { priority = 1001 })
|
||||
)
|
||||
|
||||
local ife = s(
|
||||
"ife",
|
||||
fmt(
|
||||
[[
|
||||
<%= if {condition} do %>
|
||||
{when}
|
||||
<% else %>
|
||||
{final}
|
||||
<% end %>"
|
||||
]],
|
||||
{ condition = i(1, "condition"), when = i(2), final = i(3) },
|
||||
{ priority = 1001 }
|
||||
)
|
||||
)
|
||||
|
||||
local for_ = s(
|
||||
"for",
|
||||
fmt(
|
||||
[[
|
||||
<%= for {item} <- {list} do %>
|
||||
{final}
|
||||
<% end %>
|
||||
]],
|
||||
{ item = i(1, "item"), list = i(2, "items"), final = i(3) },
|
||||
{ priority = 1001 }
|
||||
)
|
||||
)
|
||||
|
||||
local lc =
|
||||
s("lc", fmt("<.live_component module={{{module}}} id={{{id}}} />", { module = i(1), id = i(2) }, { priority = 1001 }))
|
||||
|
||||
local slot = s(
|
||||
"slot",
|
||||
fmt("<:slot>{final}</:slot>", {
|
||||
final = i(1),
|
||||
}, { priority = 1001 })
|
||||
)
|
||||
|
||||
local socketp = s(
|
||||
"socketp",
|
||||
fmt(
|
||||
[[
|
||||
socket =
|
||||
socket
|
||||
|> {final}
|
||||
]],
|
||||
{ final = i(1) },
|
||||
{ priority = 1001 }
|
||||
)
|
||||
)
|
||||
|
||||
local fl = s(
|
||||
"fl",
|
||||
fmt(
|
||||
[[
|
||||
<{elem} :for={{{item} <- {list}}} class="{class}">
|
||||
{final}
|
||||
</{elem}>
|
||||
]],
|
||||
{ elem = i(1, "div"), item = i(2, "item"), list = i(3, "items"), class = i(4), final = i(5) },
|
||||
{ priority = 1001, repeat_duplicates = true }
|
||||
)
|
||||
)
|
||||
|
||||
return {
|
||||
pe,
|
||||
ln,
|
||||
lp,
|
||||
if_,
|
||||
ife,
|
||||
for_,
|
||||
lc,
|
||||
slot,
|
||||
socketp,
|
||||
fl,
|
||||
}
|
||||
|
|
@ -1,242 +0,0 @@
|
|||
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
|
||||
|
||||
local arg_template = [[
|
||||
{arg}: {type}
|
||||
]]
|
||||
|
||||
local function pyarg()
|
||||
return sn(
|
||||
nil,
|
||||
fmt(arg_template, {
|
||||
arg = i(1, "arg"),
|
||||
type = i(2, "Any"),
|
||||
})
|
||||
)
|
||||
end
|
||||
|
||||
local function pyargs(_, _, _, user_args)
|
||||
local choices = {
|
||||
sn(nil, i(1)),
|
||||
sn(nil, {
|
||||
not user_args and t(", ") or t(""),
|
||||
d(1, pyarg),
|
||||
d(2, pyargs, { user_args = { false } }),
|
||||
}),
|
||||
}
|
||||
-- switch order for first call
|
||||
if user_args then
|
||||
local fst, snd = unpack(choices)
|
||||
choices = { snd, fst }
|
||||
end
|
||||
|
||||
return sn(nil, c(1, choices))
|
||||
end
|
||||
|
||||
local def_template = [[
|
||||
def {fname}({args}) -> {rtype}:
|
||||
"""
|
||||
{docs}
|
||||
"""
|
||||
{final}
|
||||
]]
|
||||
|
||||
local def = s(
|
||||
"def",
|
||||
fmt(def_template, {
|
||||
fname = i(1, "fname"),
|
||||
args = d(2, pyargs, nil, { user_args = { true } }),
|
||||
rtype = i(3, "None"),
|
||||
docs = i(4, "Documentation"),
|
||||
final = i(5, "pass"),
|
||||
}, { priority = 1001 })
|
||||
)
|
||||
|
||||
local defs_template = [[
|
||||
def {mname}(self, {args}) -> {rtype}:
|
||||
"""
|
||||
{docs}
|
||||
"""
|
||||
{final}
|
||||
]]
|
||||
|
||||
local defs = s(
|
||||
"defs",
|
||||
fmt(defs_template, {
|
||||
mname = i(1, "mname"),
|
||||
args = d(2, pyargs, nil, { user_args = { true } }),
|
||||
rtype = i(3, "None"),
|
||||
docs = i(4, "Documentation"),
|
||||
final = i(5, "pass"),
|
||||
}, { priority = 1001 })
|
||||
)
|
||||
|
||||
local enum_template = [[
|
||||
for {i}, {value} in enumerate({iter}):
|
||||
{final}
|
||||
]]
|
||||
|
||||
local dot_enum = postfix(".enum", {
|
||||
d(1, function(_, parent)
|
||||
return sn(
|
||||
1,
|
||||
fmt(enum_template, {
|
||||
i = i(1, "i"),
|
||||
value = i(2, "value"),
|
||||
iter = t(parent.env.POSTFIX_MATCH),
|
||||
final = i(3, "pass"),
|
||||
})
|
||||
)
|
||||
end),
|
||||
})
|
||||
|
||||
local enum = s(
|
||||
"enum",
|
||||
fmt(enum_template, {
|
||||
i = i(1, "i"),
|
||||
value = i(2, "value"),
|
||||
iter = i(3, "iter"),
|
||||
final = i(4, "pass"),
|
||||
})
|
||||
)
|
||||
|
||||
local for_template = [[
|
||||
for {item} in {iter}:
|
||||
{final}
|
||||
]]
|
||||
|
||||
local dot_for = postfix(".for", {
|
||||
d(1, function(_, parent)
|
||||
return sn(
|
||||
1,
|
||||
fmt(for_template, {
|
||||
item = i(1, "item"),
|
||||
iter = t(parent.env.POSTFIX_MATCH),
|
||||
final = i(2, "pass"),
|
||||
})
|
||||
)
|
||||
end),
|
||||
})
|
||||
|
||||
local items_template = [[
|
||||
for {key}, {value} in {iter}:
|
||||
{final}
|
||||
]]
|
||||
|
||||
local dot_items = postfix(".items", {
|
||||
d(1, function(_, parent)
|
||||
return sn(
|
||||
1,
|
||||
fmt(items_template, {
|
||||
key = i(1, "key"),
|
||||
value = i(2, "value"),
|
||||
iter = t(parent.env.POSTFIX_MATCH),
|
||||
final = i(3, "pass"),
|
||||
})
|
||||
)
|
||||
end),
|
||||
})
|
||||
|
||||
local try_template = [[
|
||||
try:
|
||||
{raises}
|
||||
except {exception} as {ename}:
|
||||
{final}
|
||||
]]
|
||||
|
||||
local dot_try = postfix(".try", {
|
||||
d(1, function(_, parent)
|
||||
return sn(
|
||||
1,
|
||||
fmt(try_template, {
|
||||
raises = t(parent.env.POSTFIX_MATCH),
|
||||
exception = i(1, "Exception"),
|
||||
ename = i(2, "e"),
|
||||
final = i(3, "pass"),
|
||||
})
|
||||
)
|
||||
end),
|
||||
})
|
||||
|
||||
local parr = s(
|
||||
"parr",
|
||||
fmt(
|
||||
[[
|
||||
:param {name}: {description}
|
||||
:type {name}: {type}
|
||||
]],
|
||||
{
|
||||
name = i(1, "name"),
|
||||
description = i(2, "description"),
|
||||
type = i(3, "type"),
|
||||
},
|
||||
{
|
||||
repeat_duplicates = true,
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
local retr = s(
|
||||
"retr",
|
||||
fmt(
|
||||
[[
|
||||
:return: {description}
|
||||
:rtype: {rtype}
|
||||
]],
|
||||
{
|
||||
description = i(1, "description"),
|
||||
rtype = i(2, "rtype"),
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
local raisr = s(
|
||||
"raisr",
|
||||
fmt(
|
||||
[[
|
||||
:raises {exception}: {description}
|
||||
]],
|
||||
{
|
||||
exception = i(1, "Exception"),
|
||||
description = i(2, "description"),
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
return {
|
||||
def,
|
||||
defs,
|
||||
dot_enum,
|
||||
dot_for,
|
||||
dot_items,
|
||||
dot_try,
|
||||
enum,
|
||||
parr,
|
||||
retr,
|
||||
raisr,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue