github.com/v2fly/tools@v0.100.0/internal/lsp/testdata/deep/deep.go (about) 1 package deep 2 3 import "context" 4 5 type deepA struct { 6 b deepB //@item(deepBField, "b", "deepB", "field") 7 } 8 9 type deepB struct { 10 } 11 12 func wantsDeepB(deepB) {} 13 14 func _() { 15 var a deepA //@item(deepAVar, "a", "deepA", "var") 16 a.b //@item(deepABField, "a.b", "deepB", "field") 17 wantsDeepB(a) //@deep(")", deepABField, deepAVar) 18 19 deepA{a} //@snippet("}", deepABField, "a.b", "a.b") 20 } 21 22 func wantsContext(context.Context) {} 23 24 func _() { 25 context.Background() //@item(ctxBackground, "context.Background", "func() context.Context", "func", "Background returns a non-nil, empty Context.") 26 context.TODO() //@item(ctxTODO, "context.TODO", "func() context.Context", "func", "TODO returns a non-nil, empty Context.") 27 28 wantsContext(c) //@rank(")", ctxBackground),rank(")", ctxTODO) 29 } 30 31 func _() { 32 // deepCircle is circular. 33 type deepCircle struct { 34 *deepCircle 35 } 36 var circle deepCircle //@item(deepCircle, "circle", "deepCircle", "var") 37 *circle.deepCircle //@item(deepCircleField, "*circle.deepCircle", "*deepCircle", "field") 38 var _ deepCircle = circ //@deep(" //", deepCircle, deepCircleField) 39 } 40 41 func _() { 42 type deepEmbedC struct { 43 } 44 type deepEmbedB struct { 45 deepEmbedC 46 } 47 type deepEmbedA struct { 48 deepEmbedB 49 } 50 51 wantsC := func(deepEmbedC) {} 52 53 var a deepEmbedA //@item(deepEmbedA, "a", "deepEmbedA", "var") 54 a.deepEmbedB //@item(deepEmbedB, "a.deepEmbedB", "deepEmbedB", "field") 55 a.deepEmbedC //@item(deepEmbedC, "a.deepEmbedC", "deepEmbedC", "field") 56 wantsC(a) //@deep(")", deepEmbedC, deepEmbedA, deepEmbedB) 57 } 58 59 func _() { 60 type nested struct { 61 a int 62 n *nested //@item(deepNestedField, "n", "*nested", "field") 63 } 64 65 nested{ 66 a: 123, //@deep(" //", deepNestedField) 67 } 68 } 69 70 func _() { 71 var a struct { 72 b struct { 73 c int 74 } 75 d int 76 } 77 78 a.d //@item(deepAD, "a.d", "int", "field") 79 a.b.c //@item(deepABC, "a.b.c", "int", "field") 80 a.b //@item(deepAB, "a.b", "struct{...}", "field") 81 a //@item(deepA, "a", "struct{...}", "var") 82 83 // "a.d" should be ranked above the deeper "a.b.c" 84 var i int 85 i = a //@deep(" //", deepAD, deepABC, deepA, deepAB) 86 } 87 88 type foo struct { 89 b bar 90 } 91 92 func (f foo) bar() bar { 93 return f.b 94 } 95 96 func (f foo) barPtr() *bar { 97 return &f.b 98 } 99 100 type bar struct{} 101 102 func (b bar) valueReceiver() int { 103 return 0 104 } 105 106 func (b *bar) ptrReceiver() int { 107 return 0 108 } 109 110 func _() { 111 var ( 112 i int 113 f foo 114 ) 115 116 f.bar().valueReceiver //@item(deepBarValue, "f.bar().valueReceiver", "func() int", "method") 117 f.barPtr().ptrReceiver //@item(deepBarPtrPtr, "f.barPtr().ptrReceiver", "func() int", "method") 118 f.barPtr().valueReceiver //@item(deepBarPtrValue, "f.barPtr().valueReceiver", "func() int", "method") 119 120 i = fbar //@fuzzy(" //", deepBarValue, deepBarPtrPtr, deepBarPtrValue) 121 } 122 123 func (b baz) Thing() struct{ val int } { 124 return b.thing 125 } 126 127 type baz struct { 128 thing struct{ val int } 129 } 130 131 func (b baz) _() { 132 b.Thing().val //@item(deepBazMethVal, "b.Thing().val", "int", "field") 133 b.thing.val //@item(deepBazFieldVal, "b.thing.val", "int", "field") 134 var _ int = bval //@rank(" //", deepBazFieldVal, deepBazMethVal) 135 }