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  }