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

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package callhierarchy
     6  
     7  import "github.com/v2fly/tools/internal/lsp/callhierarchy/outgoing"
     8  
     9  func a() { //@mark(hierarchyA, "a")
    10  	D()
    11  }
    12  
    13  func b() { //@mark(hierarchyB, "b")
    14  	D()
    15  }
    16  
    17  // C is an exported function
    18  func C() { //@mark(hierarchyC, "C")
    19  	D()
    20  	D()
    21  }
    22  
    23  // To test hierarchy across function literals
    24  var x = func() { //@mark(hierarchyLiteral, "func"),mark(hierarchyLiteralOut, "x")
    25  	D()
    26  }
    27  
    28  // D is exported to test incoming/outgoing calls across packages
    29  func D() { //@mark(hierarchyD, "D"),incomingcalls(hierarchyD, hierarchyA, hierarchyB, hierarchyC, hierarchyLiteral, incomingA),outgoingcalls(hierarchyD, hierarchyE, hierarchyF, hierarchyG, hierarchyLiteralOut, outgoingB, hierarchyFoo, hierarchyH, hierarchyI, hierarchyJ, hierarchyK)
    30  	e()
    31  	x()
    32  	F()
    33  	g()
    34  	outgoing.B()
    35  	foo := func() {} //@mark(hierarchyFoo, "foo"),incomingcalls(hierarchyFoo, hierarchyD),outgoingcalls(hierarchyFoo)
    36  	foo()
    37  
    38  	var i Interface = impl{}
    39  	i.H()
    40  	i.I()
    41  
    42  	s := Struct{}
    43  	s.J()
    44  	s.K()
    45  }
    46  
    47  func e() {} //@mark(hierarchyE, "e")
    48  
    49  // F is an exported function
    50  func F() {} //@mark(hierarchyF, "F")
    51  
    52  func g() {} //@mark(hierarchyG, "g")
    53  
    54  type Interface interface {
    55  	H() //@mark(hierarchyH, "H")
    56  	I() //@mark(hierarchyI, "I")
    57  }
    58  
    59  type impl struct{}
    60  
    61  func (i impl) H() {}
    62  func (i impl) I() {}
    63  
    64  type Struct struct {
    65  	J func() //@mark(hierarchyJ, "J")
    66  	K func() //@mark(hierarchyK, "K")
    67  }