github.com/v2fly/tools@v0.100.0/internal/lsp/testdata/address/address.go (about)

     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  }