summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/custom/snippets/go.lua
blob: d6b71143ee2e7e40d66881849d466bb327707d48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
require('luasnip.session.snippet_collection').clear_snippets('go')
local ls = require('luasnip')
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
local d = ls.dynamic_node

---@param abbr string
---@param expansion string
---@param args table
local function snip(abbr, expansion, args)
    return ls.snippet(abbr, require('luasnip.extras.fmt').fmt(expansion, args))
end

local tea_model = [=[
import (
	"fmt"

	tea "github.com/charmbracelet/bubbletea"
)

type Model struct{{
    {}
}}

func New() Model {{
	return Model{{
    }}
}}

func (m Model) Init() tea.Cmd {{
	return nil
}}

func (m Model) View() string {{
	return fmt.Sprintf(
		"%s",
		"",
	)
}}

func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {{
	switch msg := msg.(type) {{
	default:
		return m, nil
	}}
}}
]=]

local server_api = [=[
func {}(ctx context.Context, sess *session.Session, request packet{}) packet.Payload {{
}}
]=]

ls.add_snippets('go', {
    snip('tmod', tea_model, { i(0) }),
    snip('sapi', server_api, { i(1), i(0) }),

    s('iferr', {
        t({ 'if err != nil {', '' }),
        i(1, '    return'),
        t({ '', '}' }),
    }),

    s('fmterr', {
        t('fmt.Errorf("'),
        i(1, 'msg'),
        t(': %w", err)'),
    }),

    s('dberr', {
        t({ 'if err != nil {', '' }),
        i(2, { '    log.Println("database error ', 'x', ':", err)', '' }),
        i(2, '    return ', '&ErrInternalError'),
        t({ '', '}' }),
    }),
})