Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / internal / lsp / testdata / address / address.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/internal/lsp/testdata/address/address.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/internal/lsp/testdata/address/address.go
new file mode 100644 (file)
index 0000000..59d5d4c
--- /dev/null
@@ -0,0 +1,84 @@
+package address
+
+func wantsPtr(*int)            {}
+func wantsVariadicPtr(...*int) {}
+
+func wantsVariadic(...int) {}
+
+type foo struct{ c int } //@item(addrFieldC, "c", "int", "field")
+
+func _() {
+       var (
+               a string //@item(addrA, "a", "string", "var")
+               b int    //@item(addrB, "b", "int", "var")
+       )
+
+       &b //@item(addrBRef, "&b", "int", "var")
+
+       wantsPtr()   //@rank(")", addrBRef, addrA),snippet(")", addrBRef, "&b", "&b")
+       wantsPtr(&b) //@snippet(")", addrB, "b", "b")
+
+       wantsVariadicPtr() //@rank(")", addrBRef, addrA),snippet(")", addrBRef, "&b", "&b")
+
+       var s foo
+       s.c          //@item(addrDeepC, "s.c", "int", "field")
+       &s.c         //@item(addrDeepCRef, "&s.c", "int", "field")
+       wantsPtr()   //@snippet(")", addrDeepCRef, "&s.c", "&s.c")
+       wantsPtr(s)  //@snippet(")", addrDeepCRef, "&s.c", "&s.c")
+       wantsPtr(&s) //@snippet(")", addrDeepC, "s.c", "s.c")
+
+       // don't add "&" in item (it gets added as an additional edit)
+       wantsPtr(&s.c) //@snippet(")", addrFieldC, "c", "c")
+
+       // check dereferencing as well
+       var c *int
+       *c            //@item(addrCPtr, "*c", "*int", "var")
+       var _ int = _ //@rank("_ //", addrCPtr, addrA),snippet("_ //", addrCPtr, "*c", "*c")
+
+       wantsVariadic() //@rank(")", addrCPtr, addrA),snippet(")", addrCPtr, "*c", "*c")
+
+       var d **int
+       **d           //@item(addrDPtr, "**d", "**int", "var")
+       var _ int = _ //@rank("_ //", addrDPtr, addrA),snippet("_ //", addrDPtr, "**d", "**d")
+
+       type namedPtr *int
+       var np namedPtr
+       *np           //@item(addrNamedPtr, "*np", "namedPtr", "var")
+       var _ int = _ //@rank("_ //", addrNamedPtr, addrA)
+
+       // don't get tripped up by recursive pointer type
+       type dontMessUp *dontMessUp
+       var dmu *dontMessUp //@item(addrDMU, "dmu", "*dontMessUp", "var")
+
+       var _ int = dmu //@complete(" //", addrDMU)
+}
+
+func (f foo) ptr() *foo { return &f }
+
+func _() {
+       getFoo := func() foo { return foo{} }
+
+       // not addressable
+       getFoo().c //@item(addrGetFooC, "getFoo().c", "int", "field")
+
+       // addressable
+       getFoo().ptr().c  //@item(addrGetFooPtrC, "getFoo().ptr().c", "int", "field")
+       &getFoo().ptr().c //@item(addrGetFooPtrCRef, "&getFoo().ptr().c", "int", "field")
+
+       wantsPtr()   //@rank(addrGetFooPtrCRef, addrGetFooC),snippet(")", addrGetFooPtrCRef, "&getFoo().ptr().c", "&getFoo().ptr().c")
+       wantsPtr(&g) //@rank(addrGetFooPtrC, addrGetFooC),snippet(")", addrGetFooPtrC, "getFoo().ptr().c", "getFoo().ptr().c")
+}
+
+type nested struct {
+       f foo
+}
+
+func _() {
+       getNested := func() nested { return nested{} }
+
+       getNested().f.c        //@item(addrNestedC, "getNested().f.c", "int", "field")
+       &getNested().f.ptr().c //@item(addrNestedPtrC, "&getNested().f.ptr().c", "int", "field")
+
+       // addrNestedC is not addressable, so rank lower
+       wantsPtr(getNestedfc) //@fuzzy(")", addrNestedPtrC, addrNestedC)
+}