# 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