Regression example.com for #65024, "incorrect package qualification when stubbing method in v2 module". The second test (a-a) ensures that we don't use path-based heuristics to guess the PkgName of an import. -- a/v2/go.mod -- module example.com/a/v2 go 1.18 -- a/v2/a.go -- package a type I interface { F() T } type T struct {} -- a/v2/b/b.go -- package b import "example.com/a/v2" type B struct{} var _ a.I = &B{} //@ quickfix("&B{}", re"does not implement", out) // This line makes the diff tidier. -- @out/a/v2/b/b.go -- @@ -7 +7,5 @@ +// F implements a.I. +func (b *B) F() a.T { + panic("unimplemented") +} + @@ -10 +15 @@ - -- a-a/v2/go.mod -- // This module has a hyphenated name--how posh. // It won't do to use it as an identifier. // The correct name is the one in the package decl, // which in this case is not what the path heuristic would guess. module example.com/a-a/v2 go 1.18 -- a-a/v2/a.go -- package a type I interface { F() T } type T struct {} -- a-a/v2/b/b.go -- package b // Note: no existing import of a. type B struct{} var _ I = &B{} //@ quickfix("&B{}", re"does not implement", out2) // This line makes the diff tidier. -- a-a/v2/b/import-a-I.go -- package b import "example.com/a-a/v2" type I = a.I -- @out2/a-a/v2/b/b.go -- @@ -3 +3,2 @@ +import a "example.com/a-a/v2" + @@ -7 +9,5 @@ +// F implements a.I. +func (b *B) F() a.T { + panic("unimplemented") +} + @@ -10 +17 @@ -