This file contains tests for hovering over generic Go code.

Requires go1.20+ for the new go/doc/comment package, and a change in Go 1.20
that affected the formatting of constraint interfaces.

-- flags --
-min_go=go1.20

-- go.mod --
// A go.mod is require for correct pkgsite links.
// TODO(rfindley): don't link to ad-hoc or command-line-arguments packages!
module mod.com

go 1.18

-- generics.go --
package generics

type value[T any] struct { //hover("lue", "value", value),hover("T", "T", valueT)
	val T   //@hover("T", "T", valuevalT)
	Q   int64 //@hover("Q", "Q", valueQ)
}

type Value[T any] struct { //@hover("T", "T", ValueT)
	val T   //@hover("T", "T", ValuevalT)
	Q   int64 //@hover("Q", "Q", ValueQ)
}

func F[P interface{ ~int | string }]() { //@hover("P", "P", Ptparam)
	var _ P //@hover("P","P",Pvar)
}

-- inferred.go --
package generics

func app[S interface{ ~[]E }, E interface{}](s S, e E) S {
	return append(s, e)
}

func _() {
	_ = app[[]int]             //@hover("app", "app", appint)
	_ = app[[]int, int]        //@hover("app", "app", appint)
	_ = app[[]int]([]int{}, 0) //@hover("app", "app", appint), diag("[[]int]", re"unnecessary")
	_ = app([]int{}, 0)        //@hover("app", "app", appint)
}

-- @ValueQ --
```go
field Q int64 // size=8
```

@hover("Q", "Q", ValueQ)


[`(generics.Value).Q` on pkg.go.dev](https://pkg.go.dev/mod.com#Value.Q)
-- @ValueT --
```go
type parameter T any
```
-- @ValuevalT --
```go
type parameter T any
```
-- @appint --
```go
func app(s []int, e int) []int // func[S interface{~[]E}, E interface{}](s S, e E) S
```
-- @valueQ --
```go
field Q int64 // size=8
```

@hover("Q", "Q", valueQ)
-- @valuevalT --
```go
type parameter T any
```
-- @Ptparam --
```go
type parameter P interface{~int | string}
```
-- @Pvar --
```go
type parameter P interface{~int | string}
```
