package definition

// Tests of 'definition' query, -json output.
// See golang.org/x/tools/cmd/guru/guru_test.go for explanation.
// See main.golden for expected query results.

// TODO(adonovan): test: selection of member of same package defined in another file.

import (
	"lib"
	lib2 "lib"
)

func main() {
	var _ int // @definition builtin "int"

	var _ undef           // @definition lexical-undef "undef"
	var x lib.T           // @definition lexical-pkgname "lib"
	f()                   // @definition lexical-func "f"
	print(x)              // @definition lexical-var "x"
	if x := ""; x == "" { // @definition lexical-shadowing "x"
	}

	var _ lib.Type     // @definition qualified-type "Type"
	var _ lib.Func     // @definition qualified-func "Func"
	var _ lib.Var      // @definition qualified-var "Var"
	var _ lib.Const    // @definition qualified-const "Const"
	var _ lib2.Type    // @definition qualified-type-renaming "Type"
	var _ lib.Nonesuch // @definition qualified-nomember "Nonesuch"

	var u U
	print(u.field) // @definition select-field "field"
	u.method()     // @definition select-method "method"
}

func f()

type T struct{ field int }

func (T) method()

type U struct{ T }

type V1 struct {
	W // @definition embedded-other-file "W"
}

type V2 struct {
	*W // @definition embedded-other-file-pointer "W"
}

type V3 struct {
	int // @definition embedded-basic "int"
}

type V4 struct {
	*int // @definition embedded-basic-pointer "int"
}

type V5 struct {
	lib.Type // @definition embedded-other-pkg "Type"
}

type V6 struct {
	T // @definition embedded-same-file "T"
}
