| 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} |
| ``` |