kickstart.nvim/snippets/go.lua

126 lines
2.4 KiB
Lua

local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
local fmt = require("luasnip.extras.fmt").fmt
-- Configure snippet options
local snippet_opts = {
condition = function()
return not ls.in_snippet()
end,
show_condition = function()
return not ls.in_snippet()
end
}
return {
-- Complete main setup
s("main", fmt([[
package main
import "fmt"
func main() {{
{}
}}
]], { i(1, 'fmt.Println("Hello, World!")') }), snippet_opts),
-- Package declaration
s("pkg", fmt([[
package {}
]], { i(1, "main") }), snippet_opts),
-- Function
s("func", fmt([[
func {}({}) {{
{}
}}
]], { i(1, "name"), i(2), i(3) }), snippet_opts),
-- Function with return
s("funcr", fmt([[
func {}() {} {{
{}
}}
]], { i(1, "name"), i(2, "string"), i(3, 'return ""') }), snippet_opts),
-- If error
s("iferr", fmt([[
if err != nil {{
{}
}}
]], { i(1, "return err") }), snippet_opts),
-- For loop
s("for", fmt([[
for {} {{
{}
}}
]], { i(1, "i := 0; i < 10; i++"), i(2) }), snippet_opts),
-- Printf
s("pf", fmt([[
fmt.Printf("{}\n", {})
]], { i(1, "%v"), i(2, "value") }), snippet_opts),
-- Println
s("pl", fmt([[
fmt.Println({})
]], { i(1, '"Hello"') }), snippet_opts),
-- Variable declaration
s("var", fmt([[
var {} {}
]], { i(1, "name"), i(2, "string") }), snippet_opts),
-- Short variable declaration
s(":=", fmt([[
{} := {}
]], { i(1, "name"), i(2, "value") }), snippet_opts),
-- Struct
s("struct", fmt([[
type {} struct {{
{}
}}
]], { i(1, "Name"), i(2, "Field string") }), snippet_opts),
-- Interface
s("interface", fmt([[
type {} interface {{
{}
}}
]], { i(1, "Name"), i(2, "Method()") }), snippet_opts),
-- Test function
s("test", fmt([[
func Test{}(t *testing.T) {{
{}
}}
]], { i(1, "Name"), i(2) }), snippet_opts),
-- Method
s("method", fmt([[
func ({} *{}) {}() {{
{}
}}
]], { i(1, "r"), i(2, "Receiver"), i(3, "Method"), i(4) }), snippet_opts),
-- Goroutine
s("go", fmt([[
go func() {{
{}
}}()
]], { i(1) }), snippet_opts),
-- Channel
s("chan", fmt([[
{} := make(chan {})
]], { i(1, "ch"), i(2, "string") }), snippet_opts),
-- Defer
s("defer", fmt([[
defer {}
]], { i(1, "cleanup()") }), snippet_opts),
}