Skip to content

Commit 64259d1

Browse files
committed
apidiff: handle TypeParam in order to handle generic code
This enables apidiff to handle code that uses generics, whereas currently it panics when it encounters it. Change-Id: Ic77561fd4f269d2060da76ccdaab9166ec65e7ca Reviewed-on: https://go-review.googlesource.com/c/exp/+/410855 Reviewed-by: Jonathan Amsterdam <[email protected]>
1 parent a3771dd commit 64259d1

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

apidiff/correspondence.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ func (d *differ) corr(old, new types.Type, p *ifacePair) bool {
126126
return d.establishCorrespondence(old, new)
127127
}
128128

129+
case *types.TypeParam:
130+
if new, ok := new.(*types.TypeParam); ok {
131+
if old.Index() == new.Index() {
132+
return true
133+
}
134+
}
135+
129136
default:
130137
panic(fmt.Sprintf("unknown type kind %T", old))
131138
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
mod=example.com/generics
2+
base=v0.0.1
3+
-- want --
4+
# example.com/generics/a
5+
## incompatible changes
6+
Foo[V any].Value: changed from func() V to func() any
7+
## compatible changes
8+
Number: added
9+
10+
# summary
11+
Suggested version: v0.1.0
12+
-- go.mod --
13+
module example.com/generics
14+
15+
go 1.18
16+
-- a/a.go --
17+
package a
18+
19+
type Number interface {
20+
int64 | float64
21+
}
22+
23+
type Foo[V Number] interface {
24+
Value() any
25+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
mod=example.com/generics
2+
base=v0.0.1
3+
-- want --
4+
# example.com/generics/a
5+
## incompatible changes
6+
Foo[V any].Value: changed from func() V to func() int
7+
8+
# summary
9+
Suggested version: v0.1.0
10+
-- go.mod --
11+
module example.com/generics
12+
13+
go 1.18
14+
-- a/a.go --
15+
package a
16+
17+
type Foo[V any] interface {
18+
Value() int
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
mod=example.com/generics
2+
base=v0.0.1
3+
-- want --
4+
# summary
5+
Suggested version: v0.0.2
6+
-- go.mod --
7+
module example.com/generics
8+
9+
go 1.18
10+
-- a/a.go --
11+
package a
12+
13+
type Foo[V any] interface {
14+
Value() V
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
-- go.mod --
2+
module example.com/generics
3+
4+
go 1.18
5+
-- a/a.go --
6+
package a
7+
8+
type Urk[T any] interface {
9+
Value() T
10+
}
11+
12+
type Foo[V any] interface {
13+
Value() V
14+
}

0 commit comments

Comments
 (0)