159 lines
3.8 KiB
Lua
159 lines
3.8 KiB
Lua
-- luasnip.lua
|
|
local ls = require('luasnip')
|
|
local s = ls.snippet
|
|
local i = ls.insert_node
|
|
local f = ls.function_node
|
|
local fmt = require("luasnip.extras.fmt").fmt
|
|
local vscode_loader = require("luasnip.loaders.from_vscode")
|
|
|
|
vim.keymap.set({ "i", "s" }, "<C-l>", function()
|
|
if ls.expand_or_jumpable() then
|
|
ls.expand_or_jump()
|
|
end
|
|
end, { desc = "Snippet next argument", silent = true })
|
|
|
|
--------------------
|
|
-- Snippets for LUA
|
|
--------------------
|
|
ls.add_snippets('lua', {
|
|
s({ name = 'LuaSnip Snippet', trig = 'snipf' },
|
|
fmt([[
|
|
s({ name='<name>', trig='<trig>'},
|
|
fmt(<template>,
|
|
{ <inputs> },
|
|
{ <opts> }
|
|
)
|
|
),
|
|
]], {
|
|
name = i(1, 'name'),
|
|
trig = i(2, 'trig'),
|
|
template = i(3, '[[]]'),
|
|
inputs = i(4, 'nodes'),
|
|
opts = i(5,
|
|
'opts')
|
|
},
|
|
{ delimiters = '<>' }
|
|
)
|
|
),
|
|
s({ name = 'Add snippets block', trig = 'add_snip' },
|
|
fmt([[
|
|
ls.add_snippets('<filetype>', {
|
|
<snippets>
|
|
})
|
|
]],
|
|
{ filetype = i(1, 'Filetype'), snippets = i(2, 'Snippets') },
|
|
{ delimiters = '<>' }
|
|
)
|
|
),
|
|
})
|
|
|
|
--------------------
|
|
-- Generic snippets
|
|
--------------------
|
|
local function com_string(_, snip, to_multiply)
|
|
local comment_string = vim.bo.commentstring
|
|
local repeats = snip.captures[1]
|
|
local result = comment_string:gsub("%%s", ""):gsub(" ", "")
|
|
|
|
if to_multiply then
|
|
return string.sub(
|
|
string.rep(result, repeats),
|
|
0,
|
|
repeats
|
|
)
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
ls.add_snippets('all', {
|
|
s({ name = 'Comment block', trig = '#com(%d+)', regTrig = true },
|
|
fmt([[
|
|
{comment_block}
|
|
{comment} {comment_text}
|
|
{comment_block}
|
|
]],
|
|
{
|
|
comment_block = f(com_string, {}, { user_args = { true } }),
|
|
comment = f(com_string, {}, { user_args = { false } }),
|
|
comment_text = i(1,
|
|
'Comment')
|
|
}
|
|
)
|
|
),
|
|
})
|
|
|
|
--------------------
|
|
-- Terraform
|
|
--------------------
|
|
ls.add_snippets('terraform', {
|
|
s({ name = 'data_assume', trig = 'tf_assume' },
|
|
fmt([[
|
|
data "aws_iam_policy_document" "<name>" {
|
|
statement {
|
|
actions = ["sts:AssumeRole"]
|
|
|
|
principals {
|
|
type = "Service"
|
|
identifiers = ["<service>.amazonaws.com"]
|
|
}
|
|
}
|
|
}
|
|
]],
|
|
{
|
|
name = i(1, 'assume'),
|
|
service = i(2, 'service')
|
|
},
|
|
{ delimiters = '<>' }
|
|
)
|
|
),
|
|
})
|
|
|
|
------------------------------
|
|
-- YAML
|
|
------------------------------
|
|
local yaml_schema_snippet = s(
|
|
{ name = 'yaml_schema', trig = 'yaml_schema' },
|
|
fmt([[
|
|
{comment} yaml-language-server: $schema={path}
|
|
]],
|
|
{
|
|
path = i(1, 'path'),
|
|
comment = f(com_string, {}, { user_args = { false } }),
|
|
}
|
|
)
|
|
)
|
|
|
|
ls.add_snippets('yaml', { yaml_schema_snippet })
|
|
ls.add_snippets('helm', { yaml_schema_snippet })
|
|
|
|
|
|
local flux_cd_kustomization = s(
|
|
{ name = 'fluxcd_kustomization', trig = 'fluxkust' },
|
|
fmt([[
|
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
|
kind: Kustomization
|
|
metadata:
|
|
name: {name}
|
|
namespace: {namespace}
|
|
spec:
|
|
interval: {interval}
|
|
path: {path}
|
|
prune: true
|
|
sourceRef:
|
|
kind: GitRepository
|
|
name: {repository_name}
|
|
]],
|
|
{
|
|
name = i(1, 'name'),
|
|
namespace = i(2, 'flux-system'),
|
|
interval = i(3, '5m'),
|
|
path = i(4, 'path'),
|
|
repository_name = i(5, 'repository_name'),
|
|
}
|
|
)
|
|
)
|
|
|
|
ls.add_snippets('yaml', { flux_cd_kustomization })
|
|
|