123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- # Snippets for Go
- priority -10
- # shorthand variable declaration
- snippet : "v := value"
- ${1} := ${0}
- endsnippet
- # anonymous function
- snippet anon "fn := func() { ... }"
- ${1:fn} := func() {
- ${2:${VISUAL}}
- }
- ${0}
- endsnippet
- # append
- snippet ap "append(slice, value)"
- append(${1:slice}, ${0:value})
- endsnippet
- # append assignment
- snippet ap= "a = append(a, value)"
- ${1:slice} = append($1, ${0:value})
- endsnippet
- # break
- snippet br "break"
- break
- endsnippet
- # channel
- snippet ch "chan Type"
- chan ${0:int}
- endsnippet
- # case
- snippet case "case ...:"
- case ${1:value}:
- ${0:${VISUAL}}
- endsnippet
- # constant
- snippet con "const XXX Type = ..."
- const ${1:NAME} ${2:Type} = ${0:0}
- endsnippet
- # constants
- snippet cons "const ( ... )"
- const (
- ${1:NAME} ${2:Type} = ${3:value}
- ${0}
- )
- endsnippet
- # constants with iota
- snippet iota "const ( ... = iota )"
- const (
- ${1:NAME} ${2:Type} = iota
- ${0}
- )
- endsnippet
- # continue
- snippet cn "continue"
- continue
- endsnippet
- # default case
- snippet default "default: ..."
- default:
- ${0:${VISUAL}}
- endsnippet
- # defer
- snippet df "defer someFunction()"
- defer ${1:func}(${2})
- ${0}
- endsnippet
- snippet def "defer func() { ... }"
- defer func() {
- ${0:${VISUAL}}
- }()
- endsnippet
- # defer recover
- snippet defr
- defer func() {
- if err := recover(); err != nil {
- ${0:${VISUAL}}
- }
- }()
- endsnippet
- # gpl
- snippet gpl
- /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * Copyright (C) ${1:Author}, `!v strftime("%Y")`
- */
- ${0}
- endsnippet
- # import
- snippet import "import ( ... )"
- import (
- "${1:package}"
- )
- endsnippet
- # full interface snippet
- snippet interface "interface I { ... }"
- type ${1:Interface} interface {
- ${2:/* TODO: add methods */}
- }
- endsnippet
- # if condition
- snippet if "if ... { ... }"
- if ${1:condition} {
- ${0:${VISUAL}}
- }
- endsnippet
- # else snippet
- snippet else
- else {
- ${0:${VISUAL}}
- }
- endsnippet
- # if inline error
- snippet ife "If with inline erro"
- if err := ${1:condition}; err != nil {
- ${0:${VISUAL}}
- }
- endsnippet
- # error snippet
- snippet errn "Error return " !b
- if err != nil {
- return err
- }
- ${0}
- endsnippet
- # error log snippet
- snippet errl "Error with log.Fatal(err)" !b
- if err != nil {
- log.Fatal(err)
- }
- ${0}
- endsnippet
- # error multiple return
- snippet errn, "Error return with two return values" !b
- if err != nil {
- return ${1:nil}, err
- }
- ${0}
- endsnippet
- # error panic
- snippet errp "Error panic" !b
- if err != nil {
- panic(${1})
- }
- ${0}
- endsnippet
- # error test
- snippet errt "Error test fatal " !b
- if err != nil {
- t.Fatal(err)
- }
- ${0}
- endsnippet
- # error handle
- snippet errh "Error handle and return" !b
- if err != nil {
- ${1}
- return
- }
- ${0}
- endsnippet
- # json field tag
- snippet json "\`json:key\`"
- \`json:"${1:`!v go#util#snippetcase(matchstr(getline("."), '\w\+'))`}"\`
- endsnippet
- # yaml field tag
- snippet yaml "\`yaml:key\`"
- \`yaml:"${1:`!v go#util#snippetcase(matchstr(getline("."), '\w\+'))`}"\`
- endsnippet
- # fallthrough
- snippet ft "fallthrough"
- fallthrough
- endsnippet
- # for loop
- snippet for "for ... { ... }"
- for ${1} {
- ${0:${VISUAL}}
- }
- endsnippet
- # for integer loop
- snippet fori "for 0..N-1 { ... }"
- for ${1:i} := 0; $1 < ${2:N}; $1++ {
- ${0:${VISUAL}}
- }
- endsnippet
- # for range loop
- snippet forr "for k, v := range items { ... }"
- for ${2:k}, ${3:v} := range ${1} {
- ${0:${VISUAL}}
- }
- endsnippet
- # function
- snippet func "func Function(...) [error] { ... }"
- func ${1:name}(${2:params})${3/(.+)/ /}`!p opening_par(snip, 3)`$3`!p closing_par(snip, 3)` {
- ${0:${VISUAL}}
- }
- endsnippet
- # Fmt Printf debug
- snippet ff "fmt.Printf(...)"
- fmt.Printf("${1:${VISUAL}} = %+v\n", $1)
- endsnippet
- # Fmt Println debug
- snippet fn "fmt.Println(...)"
- fmt.Println("${1:${VISUAL}}")
- endsnippet
- # Fmt Errorf debug
- snippet fe "fmt.Errorf(...)"
- fmt.Errorf("${1:${VISUAL}}")
- endsnippet
- # log printf
- snippet lf "log.Printf(...)"
- log.Printf("${1:${VISUAL}} = %+v\n", $1)
- endsnippet
- # log println
- snippet ln "log.Println(...)"
- log.Println("${1:${VISUAL}}")
- endsnippet
- # make
- snippet make "make(Type, size)"
- make(${1:[]string}, ${2:0})${0}
- endsnippet
- # map
- snippet map "map[Type]Type"
- map[${1:string}]${0:int}
- endsnippet
- # main()
- snippet main "func main() { ... }"
- func main() {
- ${0:${VISUAL}}
- }
- endsnippet
- # method
- snippet meth "func (self Type) Method(...) [error] { ... }"
- func (${1:receiver} ${2:type}) ${3:name}(${4:params})${5/(.+)/ /}`!p opening_par(snip, 5)`$5`!p closing_par(snip, 5)` {
- ${0:${VISUAL}}
- }
- endsnippet
- # ok
- snippet ok "if !ok { ... }"
- if !ok {
- ${0:${VISUAL}}
- }
- endsnippet
- # package
- snippet package "package ..."
- // Package $1 provides ${2:...}
- package ${1:main}
- ${0}
- endsnippet
- # panic
- snippet pn "panic()"
- panic("${0:msg}")
- endsnippet
- # return
- snippet rt "return"
- return ${0:${VISUAL}}
- endsnippet
- # select
- snippet select "select { case a := <-chan: ... }"
- select {
- case ${1:v1} := <-${2:chan1}
- ${0}
- }
- endsnippet
- # struct
- snippet st "type T struct { ... }"
- type ${1:Type} struct {
- ${0}
- }
- endsnippet
- # switch
- snippet switch "switch x { ... }"
- switch ${1:var} {
- case ${2:value1}:
- ${0}
- }
- endsnippet
- # sprintf
- snippet sp "fmt.Sprintf(...)"
- fmt.Sprintf("%${1:s}", ${2:var})
- endsnippet
- # goroutine named function
- snippet go "go someFunc(...)"
- go ${1:funcName}(${0})
- endsnippet
- # goroutine anonymous function
- snippet gof "go func() { ... }()"
- go func() {
- ${1:${VISUAL}}
- }()
- ${0}
- endsnippet
- # test function
- snippet test "func TestXYZ(t *testing.T) { ... }"
- func Test${1:Function}(t *testing.T) {
- ${0:${VISUAL}}
- }
- endsnippet
- snippet hf "http.HandlerFunc" !b
- func ${1:handler}(w http.ResponseWriter, r *http.Request) {
- ${0:fmt.Fprintf(w, "hello world")}
- }
- endsnippet
- snippet hhf "mux.HandleFunc" !b
- ${1:http}.HandleFunc("${2:/}", func(w http.ResponseWriter, r *http.Request) {
- ${0:fmt.Fprintf(w, "hello world")}
- })
- endsnippet
- # quick test server
- snippet tsrv "httptest.NewServer"
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintln(w, ${1:`response`})
- }))
- defer ts.Close()
- ${0:someUrl} = ts.URL
- endsnippet
- # test error handling
- snippet ter "if err != nil { t.Errorf(...) }"
- if err != nil {
- t.Errorf("${0:message}")
- }
- endsnippet
- # test fatal error
- snippet terf "if err != nil { t.Fatalf(...) }"
- if err != nil {
- t.Fatalf("${0:message}")
- }
- endsnippet
- snippet example "func ExampleXYZ() { ... }"
- func Example${1:Method}() {
- ${0:${VISUAL}}
- // Output:
- }
- endsnippet
- snippet benchmark "func BenchmarkXYZ(b *testing.B) { ... }"
- func Benchmark${1:Method}(b *testing.B) {
- for i := 0; i < b.N; i++ {
- ${0:${VISUAL}}
- }
- }
- endsnippet
- # variable declaration
- snippet var "var x Type [= ...]"
- var ${1:x} ${2:Type}${3: = ${0:value}}
- endsnippet
- # variables declaration
- snippet vars "var ( ... )"
- var (
- ${1:x} ${2:Type}${3: = ${0:value}}
- )
- endsnippet
- # equals fails the test if exp is not equal to act.
- snippet eq "equals: test two identifiers with DeepEqual"
- if !reflect.DeepEqual(${1:expected}, ${2:actual}) {
- _, file, line, _ := runtime.Caller(0)
- fmt.Printf("%s:%d:\n\n\texp: %#v\n\n\tgot: %#v\n\n", filepath.Base(file), line, $1, $2)
- t.FailNow()
- }
- endsnippet
- global !p
- import re
- # Automatically wrap return types with parentheses
- def return_values(s):
- # remove everything wrapped in parentheses
- s = re.sub("\(.*?\)|\([^)]*$", "", s)
- return len(s.split(","))
- def opening_par(snip, pos):
- if return_values(t[pos]) > 1 and not t[pos].startswith("("):
- snip.rv = "("
- else:
- snip.rv = ""
- def closing_par(snip, pos):
- if return_values(t[pos]) > 1:
- snip.rv = ")"
- else:
- snip.rv = ""
- endglobal
- # vim:ft=snippets:
|