golang.org/x/tools/gopls@v0.15.3/internal/test/marker/testdata/references/issue58506.txt (about) 1 Regression test for 'references' bug golang/go#58506. 2 3 The 'references' query below, applied to method A.F, implicitly uses 4 the 'implementation' operation. The correct response includes two 5 references to B.F, one from package b and one from package d. 6 However, the incremental 'implementation' algorithm had a bug that 7 cause it to fail to report the reference from package b. 8 9 The reason was that the incremental implementation uses different 10 algorithms for the local and global cases (with disjoint results), and 11 that when it discovered that type A satisfies interface B and thus 12 that B.F must be included among the global search targets, the 13 implementation forgot to also search package b for local references 14 to B.F. 15 16 -- go.mod -- 17 module example.com 18 go 1.12 19 20 -- a/a.go -- 21 package a 22 23 type A int 24 25 func (A) F() {} //@loc(refa, "F"), refs("F", refa, refb, refd) 26 27 -- b/b.go -- 28 package b 29 30 import ( 31 "example.com/a" 32 "example.com/c" 33 ) 34 35 type B interface{ F() } 36 37 var _ B = a.A(0) 38 var _ B = c.C(0) 39 40 var _ = B.F //@loc(refb, "F") 41 42 -- c/c.go -- 43 package c 44 45 type C int 46 47 // Even though C.F is "rename coupled" to A.F by B.F, 48 // it should not be among the results. 49 func (C) F() {} 50 51 -- d/d.go -- 52 package d 53 54 import "example.com/b" 55 56 var _ interface{} = b.B.F //@loc(refd, "F")