| package snippets |
| |
| import ( |
| "bytes" |
| "go/ast" |
| "net/http" |
| "sort" |
| |
| "golang.org/x/tools/internal/lsp/foo" |
| ) |
| |
| func _() { |
| []int{} //@item(litIntSlice, "[]int{}", "", "var") |
| &[]int{} //@item(litIntSliceAddr, "&[]int{}", "", "var") |
| make([]int, 0) //@item(makeIntSlice, "make([]int, 0)", "", "func") |
| |
| var _ *[]int = in //@snippet(" //", litIntSliceAddr, "&[]int{$0\\}", "&[]int{$0\\}") |
| var _ **[]int = in //@complete(" //") |
| |
| var slice []int |
| slice = i //@snippet(" //", litIntSlice, "[]int{$0\\}", "[]int{$0\\}") |
| slice = m //@snippet(" //", makeIntSlice, "make([]int, ${1:})", "make([]int, ${1:0})") |
| } |
| |
| func _() { |
| type namedInt []int |
| |
| namedInt{} //@item(litNamedSlice, "namedInt{}", "", "var") |
| make(namedInt, 0) //@item(makeNamedSlice, "make(namedInt, 0)", "", "func") |
| |
| var namedSlice namedInt |
| namedSlice = n //@snippet(" //", litNamedSlice, "namedInt{$0\\}", "namedInt{$0\\}") |
| namedSlice = m //@snippet(" //", makeNamedSlice, "make(namedInt, ${1:})", "make(namedInt, ${1:0})") |
| } |
| |
| func _() { |
| make(chan int) //@item(makeChan, "make(chan int)", "", "func") |
| |
| var ch chan int |
| ch = m //@snippet(" //", makeChan, "make(chan int)", "make(chan int)") |
| } |
| |
| func _() { |
| map[string]struct{}{} //@item(litMap, "map[string]struct{}{}", "", "var") |
| make(map[string]struct{}) //@item(makeMap, "make(map[string]struct{})", "", "func") |
| |
| var m map[string]struct{} |
| m = m //@snippet(" //", litMap, "map[string]struct{\\}{$0\\}", "map[string]struct{\\}{$0\\}") |
| m = m //@snippet(" //", makeMap, "make(map[string]struct{\\})", "make(map[string]struct{\\})") |
| |
| struct{}{} //@item(litEmptyStruct, "struct{}{}", "", "var") |
| |
| m["hi"] = s //@snippet(" //", litEmptyStruct, "struct{\\}{\\}", "struct{\\}{\\}") |
| } |
| |
| func _() { |
| type myStruct struct{ i int } //@item(myStructType, "myStruct", "struct{...}", "struct") |
| |
| myStruct{} //@item(litStruct, "myStruct{}", "", "var") |
| &myStruct{} //@item(litStructPtr, "&myStruct{}", "", "var") |
| |
| var ms myStruct |
| ms = m //@snippet(" //", litStruct, "myStruct{$0\\}", "myStruct{$0\\}") |
| |
| var msPtr *myStruct |
| msPtr = m //@snippet(" //", litStructPtr, "&myStruct{$0\\}", "&myStruct{$0\\}") |
| |
| msPtr = &m //@snippet(" //", litStruct, "myStruct{$0\\}", "myStruct{$0\\}") |
| |
| type myStructCopy struct { i int } //@item(myStructCopyType, "myStructCopy", "struct{...}", "struct") |
| |
| // Don't offer literal completion for convertible structs. |
| ms = myStruct //@complete(" //", litStruct, myStructType, myStructCopyType) |
| } |
| |
| type myImpl struct{} |
| |
| func (myImpl) foo() {} |
| |
| func (*myImpl) bar() {} |
| |
| type myBasicImpl string |
| |
| func (myBasicImpl) foo() {} |
| |
| func _() { |
| type myIntf interface { |
| foo() |
| } |
| |
| myImpl{} //@item(litImpl, "myImpl{}", "", "var") |
| |
| var mi myIntf |
| mi = m //@snippet(" //", litImpl, "myImpl{\\}", "myImpl{\\}") |
| |
| myBasicImpl() //@item(litBasicImpl, "myBasicImpl()", "string", "var") |
| |
| mi = m //@snippet(" //", litBasicImpl, "myBasicImpl($0)", "myBasicImpl($0)") |
| |
| // only satisfied by pointer to myImpl |
| type myPtrIntf interface { |
| bar() |
| } |
| |
| &myImpl{} //@item(litImplPtr, "&myImpl{}", "", "var") |
| |
| var mpi myPtrIntf |
| mpi = m //@snippet(" //", litImplPtr, "&myImpl{\\}", "&myImpl{\\}") |
| } |
| |
| func _() { |
| var s struct{ i []int } //@item(litSliceField, "i", "[]int", "field") |
| var foo []int |
| // no literal completions after selector |
| foo = s.i //@complete(" //", litSliceField) |
| } |
| |
| func _() { |
| type myStruct struct{ i int } //@item(litMyStructType, "myStruct", "struct{...}", "struct") |
| myStruct{} //@item(litMyStruct, "myStruct{}", "", "var") |
| |
| foo := func(s string, args ...myStruct) {} |
| // Don't give literal slice candidate for variadic arg. |
| // Do give literal candidates for variadic element. |
| foo("", myStruct) //@complete(")", litMyStruct, litMyStructType) |
| } |
| |
| func _() { |
| Buffer{} //@item(litBuffer, "Buffer{}", "", "var") |
| |
| var b *bytes.Buffer |
| b = bytes.Bu //@snippet(" //", litBuffer, "Buffer{\\}", "Buffer{\\}") |
| } |
| |
| func _() { |
| _ = "func(...) {}" //@item(litFunc, "func(...) {}", "", "var") |
| |
| sort.Slice(nil, fun) //@complete(")", litFunc),snippet(")", litFunc, "func(i, j int) bool {$0\\}", "func(i, j int) bool {$0\\}") |
| |
| http.HandleFunc("", f) //@snippet(")", litFunc, "func(rw http.ResponseWriter, r *http.Request) {$0\\}", "func(${1:rw} http.ResponseWriter, ${2:r} *http.Request) {$0\\}") |
| |
| // no literal "func" completions |
| http.Handle("", fun) //@complete(")") |
| |
| http.HandlerFunc() //@item(handlerFunc, "http.HandlerFunc()", "", "var") |
| http.Handle("", h) //@snippet(")", handlerFunc, "http.HandlerFunc($0)", "http.HandlerFunc($0)") |
| http.Handle("", http.HandlerFunc()) //@snippet("))", litFunc, "func(rw http.ResponseWriter, r *http.Request) {$0\\}", "func(${1:rw} http.ResponseWriter, ${2:r} *http.Request) {$0\\}") |
| |
| var namedReturn func(s string) (b bool) |
| namedReturn = f //@snippet(" //", litFunc, "func(s string) (b bool) {$0\\}", "func(s string) (b bool) {$0\\}") |
| |
| var multiReturn func() (bool, int) |
| multiReturn = f //@snippet(" //", litFunc, "func() (bool, int) {$0\\}", "func() (bool, int) {$0\\}") |
| |
| var multiNamedReturn func() (b bool, i int) |
| multiNamedReturn = f //@snippet(" //", litFunc, "func() (b bool, i int) {$0\\}", "func() (b bool, i int) {$0\\}") |
| |
| var duplicateParams func(myImpl, int, myImpl) |
| duplicateParams = f //@snippet(" //", litFunc, "func(mi1 myImpl, i int, mi2 myImpl) {$0\\}", "func(${1:mi1} myImpl, ${2:i} int, ${3:mi2} myImpl) {$0\\}") |
| |
| type aliasImpl = myImpl |
| var aliasParams func(aliasImpl) aliasImpl |
| aliasParams = f //@snippet(" //", litFunc, "func(ai aliasImpl) aliasImpl {$0\\}", "func(${1:ai} aliasImpl) aliasImpl {$0\\}") |
| |
| const two = 2 |
| var builtinTypes func([]int, [two]bool, map[string]string, struct{ i int }, interface{ foo() }, <-chan int) |
| builtinTypes = f //@snippet(" //", litFunc, "func(i1 []int, b [two]bool, m map[string]string, s struct{ i int \\}, i2 interface{ foo() \\}, c <-chan int) {$0\\}", "func(${1:i1} []int, ${2:b} [two]bool, ${3:m} map[string]string, ${4:s} struct{ i int \\}, ${5:i2} interface{ foo() \\}, ${6:c} <-chan int) {$0\\}") |
| |
| var _ func(ast.Node) = f //@snippet(" //", litFunc, "func(n ast.Node) {$0\\}", "func(${1:n} ast.Node) {$0\\}") |
| } |
| |
| func _() { |
| StructFoo{} //@item(litStructFoo, "StructFoo{}", "struct{...}", "struct") |
| |
| var sfp *foo.StructFoo |
| // Don't insert the "&" before "StructFoo{}". |
| sfp = foo.Str //@snippet(" //", litStructFoo, "StructFoo{$0\\}", "StructFoo{$0\\}") |
| |
| var sf foo.StructFoo |
| sf = foo.Str //@snippet(" //", litStructFoo, "StructFoo{$0\\}", "StructFoo{$0\\}") |
| sf = foo. //@snippet(" //", litStructFoo, "StructFoo{$0\\}", "StructFoo{$0\\}") |
| } |
| |
| func _() { |
| float64() //@item(litFloat64, "float64()", "float64", "var") |
| |
| // don't complete to "&float64()" |
| var _ *float64 = float64 //@complete(" //") |
| |
| var f float64 |
| f = fl //@complete(" //", litFloat64),snippet(" //", litFloat64, "float64($0)", "float64($0)") |
| |
| type myInt int |
| myInt() //@item(litMyInt, "myInt()", "", "var") |
| |
| var mi myInt |
| mi = my //@snippet(" //", litMyInt, "myInt($0)", "myInt($0)") |
| } |
| |
| func _() { |
| type ptrStruct struct { |
| p *ptrStruct |
| } |
| |
| ptrStruct{} //@item(litPtrStruct, "ptrStruct{}", "", "var") |
| |
| ptrStruct{ |
| p: &ptrSt, //@rank(",", litPtrStruct) |
| } |
| |
| &ptrStruct{} //@item(litPtrStructPtr, "&ptrStruct{}", "", "var") |
| |
| &ptrStruct{ |
| p: ptrSt, //@rank(",", litPtrStructPtr) |
| } |
| } |
| |
| func _() { |
| f := func(...[]int) {} |
| f() //@snippet(")", litIntSlice, "[]int{$0\\}", "[]int{$0\\}") |
| } |
| |
| |
| func _() { |
| // don't complete to "untyped int()" |
| []int{}[untyped] //@complete("] //") |
| } |