github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/tools/oracle/testdata/src/main/describe.go (about) 1 package describe // @describe pkgdecl "describe" 2 3 // Tests of 'describe' query. 4 // See go.tools/oracle/oracle_test.go for explanation. 5 // See describe.golden for expected query results. 6 7 // TODO(adonovan): more coverage of the (extensive) logic. 8 9 type cake float64 // @describe type-ref-builtin "float64" 10 11 const c = iota // @describe const-ref-iota "iota" 12 13 const pi = 3.141 // @describe const-def-pi "pi" 14 const pie = cake(pi) // @describe const-def-pie "pie" 15 const _ = pi // @describe const-ref-pi "pi" 16 17 var global = new(string) // NB: ssa.Global is indirect, i.e. **string 18 19 func main() { // @describe func-def-main "main" 20 // func objects 21 _ = main // @describe func-ref-main "main" 22 _ = (*C).f // @describe func-ref-*C.f "..C..f" 23 _ = D.f // @describe func-ref-D.f "D.f" 24 _ = I.f // @describe func-ref-I.f "I.f" 25 var d D // @describe type-D "D" 26 var i I // @describe type-I "I" 27 _ = d.f // @describe func-ref-d.f "d.f" 28 _ = i.f // @describe func-ref-i.f "i.f" 29 30 // var objects 31 anon := func() { 32 _ = d // @describe ref-lexical-d "d" 33 } 34 _ = anon // @describe ref-anon "anon" 35 _ = global // @describe ref-global "global" 36 37 // SSA affords some local flow sensitivity. 38 var a, b int 39 var x = &a // @describe var-def-x-1 "x" 40 _ = x // @describe var-ref-x-1 "x" 41 x = &b // @describe var-def-x-2 "x" 42 _ = x // @describe var-ref-x-2 "x" 43 44 i = new(C) // @describe var-ref-i-C "i" 45 if i != nil { 46 i = D{} // @describe var-ref-i-D "i" 47 } 48 print(i) // @describe var-ref-i "\\bi\\b" 49 50 // const objects 51 const localpi = 3.141 // @describe const-local-pi "localpi" 52 const localpie = cake(pi) // @describe const-local-pie "localpie" 53 const _ = localpi // @describe const-ref-localpi "localpi" 54 55 // type objects 56 type T int // @describe type-def-T "T" 57 var three T = 3 // @describe type-ref-T "T" 58 _ = three 59 60 print(1 + 2*3) // @describe const-expr " 2.3" 61 print(real(1+2i) - 3) // @describe const-expr2 "real.*3" 62 63 m := map[string]*int{"a": &a} 64 mapval, _ := m["a"] // @describe map-lookup,ok "m..a.." 65 _ = mapval // @describe mapval "mapval" 66 _ = m // @describe m "m" 67 68 defer main() // @describe defer-stmt "defer" 69 go main() // @describe go-stmt "go" 70 71 panic(3) // @describe builtin-ref-panic "panic" 72 73 var a2 int // @describe var-decl-stmt "var a2 int" 74 _ = a2 75 var _ int // @describe var-decl-stmt2 "var _ int" 76 var _ int // @describe var-def-blank "_" 77 } 78 79 type I interface { // @describe def-iface-I "I" 80 f() // @describe def-imethod-I.f "f" 81 } 82 83 type C int 84 type D struct{} 85 86 func (c *C) f() {} 87 func (d D) f() {}