Basic test of implementation query. -- go.mod -- module example.com go 1.12 -- implementation/implementation.go -- package implementation import "example.com/other" type ImpP struct{} //@loc(ImpP, "ImpP"),implementation("ImpP", Laugher, OtherLaugher) func (*ImpP) Laugh() { //@loc(LaughP, "Laugh"),implementation("Laugh", Laugh, OtherLaugh) } type ImpS struct{} //@loc(ImpS, "ImpS"),implementation("ImpS", Laugher, OtherLaugher) func (ImpS) Laugh() { //@loc(LaughS, "Laugh"),implementation("Laugh", Laugh, OtherLaugh) } type Laugher interface { //@loc(Laugher, "Laugher"),implementation("Laugher", ImpP, OtherImpP, ImpS, OtherImpS, embedsImpP) Laugh() //@loc(Laugh, "Laugh"),implementation("Laugh", LaughP, OtherLaughP, LaughS, OtherLaughS) } type Foo struct { //@implementation("Foo", Joker) other.Foo } type Joker interface { //@loc(Joker, "Joker") Joke() //@loc(Joke, "Joke"),implementation("Joke", ImpJoker) } type cryer int //@implementation("cryer", Cryer) func (cryer) Cry(other.CryType) {} //@loc(CryImpl, "Cry"),implementation("Cry", Cry) type Empty interface{} //@implementation("Empty") var _ interface{ Joke() } //@implementation("Joke", ImpJoker) type embedsImpP struct { //@loc(embedsImpP, "embedsImpP") ImpP //@implementation("ImpP", Laugher, OtherLaugher) } -- other/other.go -- package other type ImpP struct{} //@loc(OtherImpP, "ImpP") func (*ImpP) Laugh() { //@loc(OtherLaughP, "Laugh") } type ImpS struct{} //@loc(OtherImpS, "ImpS") func (ImpS) Laugh() { //@loc(OtherLaughS, "Laugh") } type ImpI interface { //@loc(OtherLaugher, "ImpI") Laugh() //@loc(OtherLaugh, "Laugh") } type Foo struct { //@implementation("Foo", Joker) } func (Foo) Joke() { //@loc(ImpJoker, "Joke"),implementation("Joke", Joke) } type CryType int type Cryer interface { //@loc(Cryer, "Cryer") Cry(CryType) //@loc(Cry, "Cry"),implementation("Cry", CryImpl) }