nvim/snippets/go.lua

60 lines
1.3 KiB
Lua

# Go LuaSnip Snippets
local luasnip = require('luasnip')
local snip = luasnip.snippet
local text = luasnip.text_node
local ins = luasnip.insert_node
local func = luasnip.function_node
local node = luasnip.snippet_node
local key = require("luasnip.nodes.key_indexer").new_key
local function short_name(name)
local short = string.lower(string.sub(name, 1, 1))
for i = 2, #name do
local char = string.sub(name, i, i)
if char == string.upper(char) then
short = short .. char
end
end
return string.lower(short)
end
local snippets = {
snip('func', {
text('func '),
node(1, {
func(function(args)
if string.len(args[1][1]) > 0 then
return '(' .. short_name(args[1][1]) .. ' *'
end
return ''
end, key('type')),
ins(1, '', { key = 'type' }),
func(function(args)
if string.len(args[1][1]) > 0 then
return ') '
end
return ''
end, key('type')),
}),
ins(2, 'name'),
text('('),
ins(3, ''),
text(') '),
ins(4, '', { key = 'return' }),
func(function(args)
if string.len(args[1][1]) > 0 then
return ' '
end
return ''
end, key('return')),
text({ '{', '\t' }),
ins(0, ''),
text({ '', '}' }),
}),
}
return snippets