package describe // @describe pkgdecl "describe"

// Tests of 'describe' query.
// See go.tools/guru/guru_test.go for explanation.
// See describe.golden for expected query results.

// TODO(adonovan): more coverage of the (extensive) logic.

import (
	"lib"
	"nosuchpkg"            // @describe badimport1 "nosuchpkg"
	nosuchpkg2 "nosuchpkg" // @describe badimport2 "nosuchpkg2"
	_ "unsafe"             // @describe unsafe "unsafe"
)

var _ nosuchpkg.T
var _ nosuchpkg2.T

type cake float64 // @describe type-ref-builtin "float64"

const c = iota // @describe const-ref-iota "iota"

const pi = 3.141     // @describe const-def-pi "pi"
const pie = cake(pi) // @describe const-def-pie "pie"
const _ = pi         // @describe const-ref-pi "pi"

var global = new(string) // NB: ssa.Global is indirect, i.e. **string

func main() { // @describe func-def-main "main"
	// func objects
	_ = main      // @describe func-ref-main "main"
	_ = (*C).f    // @describe func-ref-*C.f "..C..f"
	_ = D.f       // @describe func-ref-D.f "D.f"
	_ = I.f       // @describe func-ref-I.f "I.f"
	var d D       // @describe type-D "D"
	var i I       // @describe type-I "I"
	_ = d.f       // @describe func-ref-d.f "d.f"
	_ = i.f       // @describe func-ref-i.f "i.f"
	var slice []D // @describe slice-of-D "slice"

	var dptr *D // @describe ptr-with-nonptr-methods "dptr"
	_ = dptr

	// var objects
	anon := func() {
		_ = d // @describe ref-lexical-d "d"
	}
	_ = anon   // @describe ref-anon "anon"
	_ = global // @describe ref-global "global"

	// SSA affords some local flow sensitivity.
	var a, b int
	var x = &a // @describe var-def-x-1 "x"
	_ = x      // @describe var-ref-x-1 "x"
	x = &b     // @describe var-def-x-2 "x"
	_ = x      // @describe var-ref-x-2 "x"

	i = new(C) // @describe var-ref-i-C "i"
	if i != nil {
		i = D{} // @describe var-ref-i-D "i"
	}
	print(i) // @describe var-ref-i "\\bi\\b"

	// const objects
	const localpi = 3.141     // @describe const-local-pi "localpi"
	const localpie = cake(pi) // @describe const-local-pie "localpie"
	const _ = localpi         // @describe const-ref-localpi "localpi"

	// type objects
	type T int      // @describe type-def-T "T"
	var three T = 3 // @describe type-ref-T "T"
	_ = three

	print(1 + 2*3)        // @describe const-expr " 2.3"
	print(real(1+2i) - 3) // @describe const-expr2 "real.*3"

	m := map[string]*int{"a": &a}
	mapval, _ := m["a"] // @describe map-lookup,ok "m..a.."
	_ = mapval          // @describe mapval "mapval"
	_ = m               // @describe m "m"

	defer main() // @describe defer-stmt "defer"
	go main()    // @describe go-stmt "go"

	panic(3) // @describe builtin-ref-panic "panic"

	var a2 int // @describe var-decl-stmt "var a2 int"
	_ = a2
	var _ int // @describe var-decl-stmt2 "var _ int"
	var _ int // @describe var-def-blank "_"

	var _ lib.Outer // @describe lib-outer "Outer"

	var mmm map[C]D // @describe var-map-of-C-D "mmm"

	d := newD().ThirdField // @describe field-access "ThirdField"

	astCopy := ast
	unknown() // @describe call-unknown "\\("
}

type I interface { // @describe def-iface-I "I"
	f() // @describe def-imethod-I.f "f"
}

type C int
type D struct {
	Field        int
	AnotherField string
	ThirdField   C
}

func (c *C) f() {}
func (d D) f()  {}

func newD() D { return D{} }
