--- /dev/null
+// Package a is a package for testing go to definition.
+package a //@mark(aPackage, "a "),hover("a ", aPackage)
+
+import (
+ "fmt"
+ "go/types"
+ "sync"
+)
+
+var (
+ // x is a variable.
+ x string //@x,hover("x", x)
+)
+
+// Constant block. When I hover on h, I should see this comment.
+const (
+ // When I hover on g, I should see this comment.
+ g = 1 //@g,hover("g", g)
+
+ h = 2 //@h,hover("h", h)
+)
+
+// z is a variable too.
+var z string //@z,hover("z", z)
+
+type A string //@mark(AString, "A")
+
+func AStuff() { //@AStuff
+ x := 5
+ Random2(x) //@godef("dom2", Random2)
+ Random() //@godef("()", Random)
+
+ var err error //@err
+ fmt.Printf("%v", err) //@godef("err", err)
+
+ var y string //@string,hover("string", string)
+ _ = make([]int, 0) //@make,hover("make", make)
+
+ var mu sync.Mutex
+ mu.Lock() //@Lock,hover("Lock", Lock)
+
+ var typ *types.Named //@mark(typesImport, "types"),hover("types", typesImport)
+ typ.Obj().Name() //@Name,hover("Name", Name)
+}
+
+type A struct {
+}
+
+func (_ A) Hi() {} //@mark(AHi, "Hi")
+
+type S struct {
+ Field int //@mark(AField, "Field")
+ R // embed a struct
+ H // embed an interface
+}
+
+type R struct {
+ Field2 int //@mark(AField2, "Field2")
+}
+
+func (_ R) Hey() {} //@mark(AHey, "Hey")
+
+type H interface {
+ Goodbye() //@mark(AGoodbye, "Goodbye")
+}
+
+type I interface {
+ B() //@mark(AB, "B")
+ J
+}
+
+type J interface {
+ Hello() //@mark(AHello, "Hello")
+}