aboutsummaryrefslogtreecommitdiff
path: root/gopls/internal/lsp/testdata/typeparams/type_params.go
diff options
context:
space:
mode:
Diffstat (limited to 'gopls/internal/lsp/testdata/typeparams/type_params.go')
-rw-r--r--gopls/internal/lsp/testdata/typeparams/type_params.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/gopls/internal/lsp/testdata/typeparams/type_params.go b/gopls/internal/lsp/testdata/typeparams/type_params.go
new file mode 100644
index 000000000..21fc7049f
--- /dev/null
+++ b/gopls/internal/lsp/testdata/typeparams/type_params.go
@@ -0,0 +1,61 @@
+//go:build go1.18
+// +build go1.18
+
+package typeparams
+
+func one[a int | string]() {}
+func two[a int | string, b float64 | int]() {}
+
+func _() {
+ one[]() //@rank("]", string, float64)
+ two[]() //@rank("]", int, float64)
+ two[int, f]() //@rank("]", float64, float32)
+}
+
+func slices[a []int | []float64]() {} //@item(tpInts, "[]int", "[]int", "type"),item(tpFloats, "[]float64", "[]float64", "type")
+
+func _() {
+ slices[]() //@rank("]", tpInts),rank("]", tpFloats)
+}
+
+type s[a int | string] struct{}
+
+func _() {
+ s[]{} //@rank("]", int, float64)
+}
+
+func takesGeneric[a int | string](s[a]) {
+ "s[a]{}" //@item(tpInScopeLit, "s[a]{}", "", "var")
+ takesGeneric() //@rank(")", tpInScopeLit),snippet(")", tpInScopeLit, "s[a]{\\}", "s[a]{\\}")
+}
+
+func _() {
+ s[int]{} //@item(tpInstLit, "s[int]{}", "", "var")
+ takesGeneric[int]() //@rank(")", tpInstLit),snippet(")", tpInstLit, "s[int]{\\}", "s[int]{\\}")
+
+ "s[...]{}" //@item(tpUninstLit, "s[...]{}", "", "var")
+ takesGeneric() //@rank(")", tpUninstLit),snippet(")", tpUninstLit, "s[${1:}]{\\}", "s[${1:a}]{\\}")
+}
+
+func returnTP[A int | float64](a A) A { //@item(returnTP, "returnTP", "something", "func")
+ return a
+}
+
+func _() {
+ // disabled - see issue #54822
+ var _ int = returnTP // snippet(" //", returnTP, "returnTP[${1:}](${2:})", "returnTP[${1:A int|float64}](${2:a A})")
+
+ var aa int //@item(tpInt, "aa", "int", "var")
+ var ab float64 //@item(tpFloat, "ab", "float64", "var")
+ returnTP[int](a) //@rank(")", tpInt, tpFloat)
+}
+
+func takesFunc[T any](func(T) T) {
+ var _ func(t T) T = f //@snippet(" //", tpLitFunc, "func(t T) T {$0\\}", "func(t T) T {$0\\}")
+}
+
+func _() {
+ _ = "func(...) {}" //@item(tpLitFunc, "func(...) {}", "", "var")
+ takesFunc() //@snippet(")", tpLitFunc, "func(${1:}) ${2:} {$0\\}", "func(${1:t} ${2:T}) ${3:T} {$0\\}")
+ takesFunc[int]() //@snippet(")", tpLitFunc, "func(i int) int {$0\\}", "func(${1:i} int) int {$0\\}")
+}