This test exercises various renaming features on generic code.
Fixed bugs:
- golang/go#61614: renaming a method of a type in a package that uses type
parameter composite lits used to panic, because previous iterations of the
satisfy analysis did not account for this language feature.
- golang/go#61635: renaming type parameters did not work when they were
capitalized and the package was imported by another package.
-- flags --
-min_go=go1.20
-- go.mod --
module example.com
go 1.20
-- a.go --
package a
type I int
func (I) m() {} //@rename("m", "M", mToM)
func _[P ~[]int]() {
_ = P{}
}
-- @mToM/a.go --
@@ -5 +5 @@
-func (I) m() {} //@rename("m", "M", mToM)
+func (I) M() {} //@rename("m", "M", mToM)
-- g.go --
package a
type S[P any] struct { //@rename("P", "Q", PToQ)
P P
F func(P) P
}
func F[R any](r R) {
var _ R //@rename("R", "S", RToS)
}
-- @PToQ/g.go --
@@ -3,3 +3,3 @@
-type S[P any] struct { //@rename("P", "Q", PToQ)
- P P
- F func(P) P
+type S[Q any] struct { //@rename("P", "Q", PToQ)
+ P Q
+ F func(Q) Q
-- @RToS/g.go --
@@ -8,2 +8,2 @@
-func F[R any](r R) {
- var _ R //@rename("R", "S", RToS)
+func F[S any](r S) {
+ var _ S //@rename("R", "S", RToS)
-- issue61635/p.go --
package issue61635
type builder[S ~[]F, F ~string] struct { //@rename("S", "T", SToT)
name string
elements S
elemData map[F][]ElemData[F]
// other fields...
}
type ElemData[F ~string] struct {
Name F
// other fields...
}
type BuilderImpl[S ~[]F, F ~string] struct{ builder[S, F] }
-- importer/i.go --
package importer
import "example.com/issue61635" // importing is necessary to repro golang/go#61635
var _ issue61635.ElemData[string]
-- @SToT/issue61635/p.go --
@@ -3 +3 @@
-type builder[S ~[]F, F ~string] struct { //@rename("S", "T", SToT)
+type builder[T ~[]F, F ~string] struct { //@rename("S", "T", SToT)
@@ -5 +5 @@
- elements S
+ elements T
-- instances/type.go --
package instances
type R[P any] struct { //@rename("R", "u", Rtou)
Next *R[P] //@rename("R", "s", RTos)
}
func (rv R[P]) Do(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
var x R[P]
return rv.Do(x) //@rename("Do", "Do2", DoToDo2)
}
func _() {
var x R[int] //@rename("R", "r", RTor)
x = x.Do(x)
}
-- @RTos/instances/type.go --
@@ -3,2 +3,2 @@
-type R[P any] struct { //@rename("R", "u", Rtou)
- Next *R[P] //@rename("R", "s", RTos)
+type s[P any] struct { //@rename("R", "u", Rtou)
+ Next *s[P] //@rename("R", "s", RTos)
@@ -7,2 +7,2 @@
-func (rv R[P]) Do(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
- var x R[P]
+func (rv s[P]) Do(s[P]) s[P] { //@rename("Do", "Do1", DoToDo1)
+ var x s[P]
@@ -13 +13 @@
- var x R[int] //@rename("R", "r", RTor)
+ var x s[int] //@rename("R", "r", RTor)
-- @Rtou/instances/type.go --
@@ -3,2 +3,2 @@
-type R[P any] struct { //@rename("R", "u", Rtou)
- Next *R[P] //@rename("R", "s", RTos)
+type u[P any] struct { //@rename("R", "u", Rtou)
+ Next *u[P] //@rename("R", "s", RTos)
@@ -7,2 +7,2 @@
-func (rv R[P]) Do(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
- var x R[P]
+func (rv u[P]) Do(u[P]) u[P] { //@rename("Do", "Do1", DoToDo1)
+ var x u[P]
@@ -13 +13 @@
- var x R[int] //@rename("R", "r", RTor)
+ var x u[int] //@rename("R", "r", RTor)
-- @DoToDo1/instances/type.go --
@@ -7 +7 @@
-func (rv R[P]) Do(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
+func (rv R[P]) Do1(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
@@ -9 +9 @@
- return rv.Do(x) //@rename("Do", "Do2", DoToDo2)
+ return rv.Do1(x) //@rename("Do", "Do2", DoToDo2)
@@ -14 +14 @@
- x = x.Do(x)
+ x = x.Do1(x)
-- @DoToDo2/instances/type.go --
@@ -7 +7 @@
-func (rv R[P]) Do(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
+func (rv R[P]) Do2(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
@@ -9 +9 @@
- return rv.Do(x) //@rename("Do", "Do2", DoToDo2)
+ return rv.Do2(x) //@rename("Do", "Do2", DoToDo2)
@@ -14 +14 @@
- x = x.Do(x)
+ x = x.Do2(x)
-- instances/func.go --
package instances
func Foo[P any](p P) { //@rename("Foo", "Bar", FooToBar)
Foo(p) //@rename("Foo", "Baz", FooToBaz)
}
-- @FooToBar/instances/func.go --
@@ -3,2 +3,2 @@
-func Foo[P any](p P) { //@rename("Foo", "Bar", FooToBar)
- Foo(p) //@rename("Foo", "Baz", FooToBaz)
+func Bar[P any](p P) { //@rename("Foo", "Bar", FooToBar)
+ Bar(p) //@rename("Foo", "Baz", FooToBaz)
-- @FooToBaz/instances/func.go --
@@ -3,2 +3,2 @@
-func Foo[P any](p P) { //@rename("Foo", "Bar", FooToBar)
- Foo(p) //@rename("Foo", "Baz", FooToBaz)
+func Baz[P any](p P) { //@rename("Foo", "Bar", FooToBar)
+ Baz(p) //@rename("Foo", "Baz", FooToBaz)
-- @RTor/instances/type.go --
@@ -3,2 +3,2 @@
-type R[P any] struct { //@rename("R", "u", Rtou)
- Next *R[P] //@rename("R", "s", RTos)
+type r[P any] struct { //@rename("R", "u", Rtou)
+ Next *r[P] //@rename("R", "s", RTos)
@@ -7,2 +7,2 @@
-func (rv R[P]) Do(R[P]) R[P] { //@rename("Do", "Do1", DoToDo1)
- var x R[P]
+func (rv r[P]) Do(r[P]) r[P] { //@rename("Do", "Do1", DoToDo1)
+ var x r[P]
@@ -13 +13 @@
- var x R[int] //@rename("R", "r", RTor)
+ var x r[int] //@rename("R", "r", RTor)