Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / internal / lsp / testdata / address / address.go
1 package address
2
3 func wantsPtr(*int)            {}
4 func wantsVariadicPtr(...*int) {}
5
6 func wantsVariadic(...int) {}
7
8 type foo struct{ c int } //@item(addrFieldC, "c", "int", "field")
9
10 func _() {
11         var (
12                 a string //@item(addrA, "a", "string", "var")
13                 b int    //@item(addrB, "b", "int", "var")
14         )
15
16         &b //@item(addrBRef, "&b", "int", "var")
17
18         wantsPtr()   //@rank(")", addrBRef, addrA),snippet(")", addrBRef, "&b", "&b")
19         wantsPtr(&b) //@snippet(")", addrB, "b", "b")
20
21         wantsVariadicPtr() //@rank(")", addrBRef, addrA),snippet(")", addrBRef, "&b", "&b")
22
23         var s foo
24         s.c          //@item(addrDeepC, "s.c", "int", "field")
25         &s.c         //@item(addrDeepCRef, "&s.c", "int", "field")
26         wantsPtr()   //@snippet(")", addrDeepCRef, "&s.c", "&s.c")
27         wantsPtr(s)  //@snippet(")", addrDeepCRef, "&s.c", "&s.c")
28         wantsPtr(&s) //@snippet(")", addrDeepC, "s.c", "s.c")
29
30         // don't add "&" in item (it gets added as an additional edit)
31         wantsPtr(&s.c) //@snippet(")", addrFieldC, "c", "c")
32
33         // check dereferencing as well
34         var c *int
35         *c            //@item(addrCPtr, "*c", "*int", "var")
36         var _ int = _ //@rank("_ //", addrCPtr, addrA),snippet("_ //", addrCPtr, "*c", "*c")
37
38         wantsVariadic() //@rank(")", addrCPtr, addrA),snippet(")", addrCPtr, "*c", "*c")
39
40         var d **int
41         **d           //@item(addrDPtr, "**d", "**int", "var")
42         var _ int = _ //@rank("_ //", addrDPtr, addrA),snippet("_ //", addrDPtr, "**d", "**d")
43
44         type namedPtr *int
45         var np namedPtr
46         *np           //@item(addrNamedPtr, "*np", "namedPtr", "var")
47         var _ int = _ //@rank("_ //", addrNamedPtr, addrA)
48
49         // don't get tripped up by recursive pointer type
50         type dontMessUp *dontMessUp
51         var dmu *dontMessUp //@item(addrDMU, "dmu", "*dontMessUp", "var")
52
53         var _ int = dmu //@complete(" //", addrDMU)
54 }
55
56 func (f foo) ptr() *foo { return &f }
57
58 func _() {
59         getFoo := func() foo { return foo{} }
60
61         // not addressable
62         getFoo().c //@item(addrGetFooC, "getFoo().c", "int", "field")
63
64         // addressable
65         getFoo().ptr().c  //@item(addrGetFooPtrC, "getFoo().ptr().c", "int", "field")
66         &getFoo().ptr().c //@item(addrGetFooPtrCRef, "&getFoo().ptr().c", "int", "field")
67
68         wantsPtr()   //@rank(addrGetFooPtrCRef, addrGetFooC),snippet(")", addrGetFooPtrCRef, "&getFoo().ptr().c", "&getFoo().ptr().c")
69         wantsPtr(&g) //@rank(addrGetFooPtrC, addrGetFooC),snippet(")", addrGetFooPtrC, "getFoo().ptr().c", "getFoo().ptr().c")
70 }
71
72 type nested struct {
73         f foo
74 }
75
76 func _() {
77         getNested := func() nested { return nested{} }
78
79         getNested().f.c        //@item(addrNestedC, "getNested().f.c", "int", "field")
80         &getNested().f.ptr().c //@item(addrNestedPtrC, "&getNested().f.ptr().c", "int", "field")
81
82         // addrNestedC is not addressable, so rank lower
83         wantsPtr(getNestedfc) //@fuzzy(")", addrNestedPtrC, addrNestedC)
84 }