github.com/v2fly/tools@v0.100.0/internal/lsp/testdata/func_rank/func_rank.go.in (about) 1 package func_rank 2 3 import "net/http" 4 5 var stringAVar = "var" //@item(stringAVar, "stringAVar", "string", "var") 6 func stringBFunc() string { return "str" } //@item(stringBFunc, "stringBFunc", "func() string", "func") 7 type stringer struct{} //@item(stringer, "stringer", "struct{...}", "struct") 8 9 func _() stringer //@complete("tr", stringer) 10 11 func _(val stringer) {} //@complete("tr", stringer) 12 13 func (stringer) _() {} //@complete("tr", stringer) 14 15 func _() { 16 var s struct { 17 AA int //@item(rankAA, "AA", "int", "field") 18 AB string //@item(rankAB, "AB", "string", "field") 19 AC int //@item(rankAC, "AC", "int", "field") 20 } 21 fnStr := func(string) {} 22 fnStr(s.A) //@complete(")", rankAB, rankAA, rankAC) 23 fnStr("" + s.A) //@complete(")", rankAB, rankAA, rankAC) 24 25 fnInt := func(int) {} 26 fnInt(-s.A) //@complete(")", rankAA, rankAC, rankAB) 27 28 // no expected type 29 fnInt(func() int { s.A }) //@complete(" }", rankAA, rankAB, rankAC) 30 fnInt(s.A()) //@complete("()", rankAA, rankAC, rankAB) 31 fnInt([]int{}[s.A]) //@complete("])", rankAA, rankAC, rankAB) 32 fnInt([]int{}[:s.A]) //@complete("])", rankAA, rankAC, rankAB) 33 34 fnInt(s.A.(int)) //@complete(".(", rankAA, rankAC, rankAB) 35 36 fnPtr := func(*string) {} 37 fnPtr(&s.A) //@complete(")", rankAB, rankAA, rankAC) 38 39 var aaPtr *string //@item(rankAAPtr, "aaPtr", "*string", "var") 40 var abPtr *int //@item(rankABPtr, "abPtr", "*int", "var") 41 fnInt(*a) //@complete(")", rankABPtr, rankAAPtr) 42 43 _ = func() string { 44 return s.A //@complete(" //", rankAB, rankAA, rankAC) 45 } 46 } 47 48 type foo struct { 49 fooPrivateField int //@item(rankFooPrivField, "fooPrivateField", "int", "field") 50 FooPublicField int //@item(rankFooPubField, "FooPublicField", "int", "field") 51 } 52 53 func (foo) fooPrivateMethod() int { //@item(rankFooPrivMeth, "fooPrivateMethod", "func() int", "method") 54 return 0 55 } 56 57 func (foo) FooPublicMethod() int { //@item(rankFooPubMeth, "FooPublicMethod", "func() int", "method") 58 return 0 59 } 60 61 func _() { 62 var _ int = foo{}. //@rank(" //", rankFooPrivField, rankFooPubField),rank(" //", rankFooPrivMeth, rankFooPubMeth),rank(" //", rankFooPrivField, rankFooPrivMeth) 63 } 64 65 func _() { 66 HandleFunc //@item(httpHandleFunc, "HandleFunc", "func(pattern string, handler func(ResponseWriter, *Request))", "func") 67 HandlerFunc //@item(httpHandlerFunc, "HandlerFunc", "func(http.ResponseWriter, *http.Request)", "type") 68 69 http.HandleFunc //@rank(" //", httpHandleFunc, httpHandlerFunc) 70 }