This test exercises renaming of interface methods. The golden is currently wrong due to https://github.com/golang/go/issues/58506: the reference to B.F in package b should be renamed too. -- go.mod -- module example.com go 1.12 -- a/a.go -- package a type A int func (A) F() {} //@renameerr("F", "G", errAfToG) -- b/b.go -- package b import "example.com/a" import "example.com/c" type B interface { F() } //@rename("F", "G", BfToG) var _ B = a.A(0) var _ B = c.C(0) -- c/c.go -- package c type C int func (C) F() {} //@renameerr("F", "G", errCfToG) -- d/d.go -- package d import "example.com/b" var _ = b.B.F -- @errAfToG -- a/a.go:5:10: renaming this method "F" to "G" b/b.go:6:6: would make example.com/a.A no longer assignable to interface B b/b.go:6:20: (rename example.com/b.B.F if you intend to change both types) -- @BfToG/b/b.go -- @@ -6 +6 @@ -type B interface { F() } //@rename("F", "G", BfToG) +type B interface { G() } //@rename("F", "G", BfToG) -- @BfToG/d/d.go -- @@ -5 +5 @@ -var _ = b.B.F +var _ = b.B.G -- @errCfToG -- c/c.go:5:10: renaming this method "F" to "G" b/b.go:6:6: would make example.com/c.C no longer assignable to interface B b/b.go:6:20: (rename example.com/b.B.F if you intend to change both types)