Skip to content

Commit 41211c8

Browse files
adonovangopherbot
authored andcommitted
gopls/internal/golang: fix bug in freeRefs algorithm
The special case for dot imports was spuriously matching struct field names from other packages. + regression test Change-Id: Ib125e22f092b793007f6ee60d8e58890762c37a4 Reviewed-on: https://go-review.googlesource.com/c/tools/+/586780 LUCI-TryBot-Result: Go LUCI <[email protected]> Auto-Submit: Alan Donovan <[email protected]> Reviewed-by: Robert Findley <[email protected]>
1 parent 788d39e commit 41211c8

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

gopls/internal/golang/freesymbols.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ func freeRefs(pkg *types.Package, info *types.Info, file *ast.File, start, end t
358358

359359
// Compute dotted path.
360360
objects := append(suffix, obj)
361-
if obj.Pkg() != nil && obj.Pkg() != pkg { // dot import
361+
if obj.Pkg() != nil && obj.Pkg() != pkg && isPackageLevel(obj) { // dot import
362362
// Synthesize the implicit PkgName.
363363
pkgName := types.NewPkgName(token.NoPos, pkg, obj.Pkg().Name(), obj.Pkg())
364364
parent = fileScope

gopls/internal/golang/freesymbols_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ func TestFreeRefs(t *testing.T) {
5454
`package p; import . "errors"; var _ = « New»`,
5555
[]string{"file pkgname errors.New"},
5656
},
57+
{
58+
// struct field (regression test for overzealous dot import logic)
59+
`package p; import "net/url"; var _ = «url.URL{Host: ""}»`,
60+
[]string{"file pkgname url.URL"},
61+
},
62+
{
63+
// dot imports (another regression test of same)
64+
`package p; import . "net/url"; var _ = «URL{Host: ""}»`,
65+
[]string{"file pkgname url.URL"},
66+
},
5767
{
5868
// dot import of unsafe (a corner case)
5969
`package p; import . "unsafe"; var _ « Pointer»`,

0 commit comments

Comments
 (0)