File: generics.txt

package info (click to toggle)
golang-golang-x-tools 1%3A0.25.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 22,724 kB
  • sloc: javascript: 2,027; asm: 1,645; sh: 166; yacc: 155; makefile: 49; ansic: 8
file content (117 lines) | stat: -rw-r--r-- 2,395 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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.

Its size expectations assume a 64-bit machine.

-- flags --
-min_go=go1.20
-skip_goarch=386,arm

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

-- issue68213.go --
package generics

// Hovering over an interface with empty type set must not panic.
type empty interface { //@hover("empty", "empty", empty)
	int
	string
}

-- @empty --
```go
type empty interface { // size=16 (0x10)
	int
	string
}
```

Hovering over an interface with empty type set must not panic.
-- 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)
}

-- @value --
```go
type value[T any] struct {
	val T     //@hover("T", "T", valuevalT)
	Q   int64 //@hover("Q", "Q", valueQ)
}
```
-- @valueT --
```go
type parameter T any
```
-- @valuevalT --
```go
type parameter T any
```
-- @valueQ --
```go
field Q int64 // size=8
```

@hover("Q", "Q", valueQ)
-- @ValueT --
```go
type parameter T any
```
-- @ValuevalT --
```go
type parameter T any
```
-- @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)
-- @Ptparam --
```go
type parameter P interface{~int | string}
```
-- @Pvar --
```go
type parameter P interface{~int | string}
```
-- 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)
}

-- @appint --
```go
func app(s []int, e int) []int // func[S interface{~[]E}, E interface{}](s S, e E) S
```