GoPLS Viewer

Home|gopls/cmd/guru/testdata/src/describe/main.go
1package 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
9import (
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
19var _ nosuchpkg.T
20var _ nosuchpkg2.T
21
22type cake float64 // @describe type-ref-builtin "float64"
23
24const c = iota // @describe const-ref-iota "iota"
25
26const pi = 3.141     // @describe const-def-pi "pi"
27const pie = cake(pi// @describe const-def-pie "pie"
28const _ = pi         // @describe const-ref-pi "pi"
29
30var global = new(string// NB: ssa.Global is indirect, i.e. **string
31
32func 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 ab 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
105type I interface { // @describe def-iface-I "I"
106    f() // @describe def-imethod-I.f "f"
107}
108
109type C int
110type D struct {
111    Field        int
112    AnotherField string
113    ThirdField   C
114}
115
116func (c *Cf() {}
117func (d Df()  {}
118
119func newD() D { return D{} }
120
MembersX
main.astCopy
D
D.AnotherField
D.f
nosuchpkg2
main.b
main.m
D.ThirdField
main.d
main.i
main.T
main.three
D.Field
cake
c
main.a2
C
lib
pi
main.slice
nosuchpkg
main.dptr
main.a
main.mmm
I
main
main.localpi
C.f.c
C.f
D.f.d
newD
Members
X