github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/cmd/guru/testdata/src/describe/main.go (about)

     1  package describe // @describe pkgdecl "describe"
     2  
     3  // Tests of 'describe' query.
     4  // See go.tools/guru/guru_test.go for explanation.
     5  // See describe.golden for expected query results.
     6  
     7  // TODO(adonovan): more coverage of the (extensive) logic.
     8  
     9  import (
    10  	"lib"
    11  	"nosuchpkg"            // @describe badimport1 "nosuchpkg"
    12  	nosuchpkg2 "nosuchpkg" // @describe badimport2 "nosuchpkg2"
    13  	// The unsafe package changed in Go 1.17 with the addition of
    14  	// unsafe.Add and unsafe.Slice. While we still support older versions
    15  	// of Go, the test case below cannot be enabled.
    16  	// _ "unsafe"             // @describe unsafe "unsafe"
    17  )
    18  
    19  var _ nosuchpkg.T
    20  var _ nosuchpkg2.T
    21  
    22  type cake float64 // @describe type-ref-builtin "float64"
    23  
    24  const c = iota // @describe const-ref-iota "iota"
    25  
    26  const pi = 3.141     // @describe const-def-pi "pi"
    27  const pie = cake(pi) // @describe const-def-pie "pie"
    28  const _ = pi         // @describe const-ref-pi "pi"
    29  
    30  var global = new(string) // NB: ssa.Global is indirect, i.e. **string
    31  
    32  func main() { // @describe func-def-main "main"
    33  	// func objects
    34  	_ = main      // @describe func-ref-main "main"
    35  	_ = (*C).f    // @describe func-ref-*C.f "..C..f"
    36  	_ = D.f       // @describe func-ref-D.f "D.f"
    37  	_ = I.f       // @describe func-ref-I.f "I.f"
    38  	var d D       // @describe type-D "D"
    39  	var i I       // @describe type-I "I"
    40  	_ = d.f       // @describe func-ref-d.f "d.f"
    41  	_ = i.f       // @describe func-ref-i.f "i.f"
    42  	var slice []D // @describe slice-of-D "slice"
    43  
    44  	var dptr *D // @describe ptr-with-nonptr-methods "dptr"
    45  	_ = dptr
    46  
    47  	// var objects
    48  	anon := func() {
    49  		_ = d // @describe ref-lexical-d "d"
    50  	}
    51  	_ = anon   // @describe ref-anon "anon"
    52  	_ = global // @describe ref-global "global"
    53  
    54  	// SSA affords some local flow sensitivity.
    55  	var a, b int
    56  	var x = &a // @describe var-def-x-1 "x"
    57  	_ = x      // @describe var-ref-x-1 "x"
    58  	x = &b     // @describe var-def-x-2 "x"
    59  	_ = x      // @describe var-ref-x-2 "x"
    60  
    61  	i = new(C) // @describe var-ref-i-C "i"
    62  	if i != nil {
    63  		i = D{} // @describe var-ref-i-D "i"
    64  	}
    65  	print(i) // @describe var-ref-i "\\bi\\b"
    66  
    67  	// const objects
    68  	const localpi = 3.141     // @describe const-local-pi "localpi"
    69  	const localpie = cake(pi) // @describe const-local-pie "localpie"
    70  	const _ = localpi         // @describe const-ref-localpi "localpi"
    71  
    72  	// type objects
    73  	type T int      // @describe type-def-T "T"
    74  	var three T = 3 // @describe type-ref-T "T"
    75  	_ = three
    76  
    77  	print(1 + 2*3)        // @describe const-expr " 2.3"
    78  	print(real(1+2i) - 3) // @describe const-expr2 "real.*3"
    79  
    80  	m := map[string]*int{"a": &a}
    81  	mapval, _ := m["a"] // @describe map-lookup,ok "m..a.."
    82  	_ = mapval          // @describe mapval "mapval"
    83  	_ = m               // @describe m "m"
    84  
    85  	defer main() // @describe defer-stmt "defer"
    86  	go main()    // @describe go-stmt "go"
    87  
    88  	panic(3) // @describe builtin-ref-panic "panic"
    89  
    90  	var a2 int // @describe var-decl-stmt "var a2 int"
    91  	_ = a2
    92  	var _ int // @describe var-decl-stmt2 "var _ int"
    93  	var _ int // @describe var-def-blank "_"
    94  
    95  	var _ lib.Outer // @describe lib-outer "Outer"
    96  
    97  	var mmm map[C]D // @describe var-map-of-C-D "mmm"
    98  
    99  	d := newD().ThirdField // @describe field-access "ThirdField"
   100  
   101  	astCopy := ast
   102  	unknown() // @describe call-unknown "\\("
   103  }
   104  
   105  type I interface { // @describe def-iface-I "I"
   106  	f() // @describe def-imethod-I.f "f"
   107  }
   108  
   109  type C int
   110  type D struct {
   111  	Field        int
   112  	AnotherField string
   113  	ThirdField   C
   114  }
   115  
   116  func (c *C) f() {}
   117  func (d D) f()  {}
   118  
   119  func newD() D { return D{} }