This test checks definition and hover over imports.

Requires go1.19+ for the new go/doc/comment package.

-- flags --
-min_go=go1.19

-- go.mod --
module mod.com

go 1.18
-- foo/foo.go --
package foo

type Foo struct{}

// DoFoo does foo.
func DoFoo() {} //@loc(DoFoo, "DoFoo")
-- bar/bar.go --
package bar

import (
	myFoo "mod.com/foo" //@loc(myFoo, "myFoo")
)

var _ *myFoo.Foo //@def("myFoo", myFoo),hover("myFoo", "myFoo", myFoo)
-- bar/dotimport.go --
package bar

import . "mod.com/foo"

func _() {
	// variable of type foo.Foo
	var _ Foo //@hover("_", "_", FooVar)

	DoFoo() //@hover("DoFoo", "DoFoo", DoFoo)
}
-- @DoFoo --
```go
func DoFoo()
```

DoFoo does foo.


[`foo.DoFoo` on pkg.go.dev](https://pkg.go.dev/mod.com/foo#DoFoo)
-- @FooVar --
```go
var _ Foo
```

variable of type foo.Foo
-- @myFoo --
```go
package myFoo ("mod.com/foo")
```

[`myFoo` on pkg.go.dev](https://pkg.go.dev/mod.com/foo)
