internal/lsp/source: fix unexported references of non-workspace packages
qualifiedObjsAtProtocolPos returned too early. Have it keep looking in
the rest of the candidate packages.
This changes the returned error slightly but AFAICT nobody cares.
Updates golang/go#40809.
Change-Id: Ic8199a484f0abcaa48cb6a3bcdd782195802d670
Reviewed-on: https://go-review.googlesource.com/c/tools/+/249637
Run-TryBot: Heschi Kreinick <heschi@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/lsp/regtest/definition_test.go b/internal/lsp/regtest/definition_test.go
index 727b3d5..3f3e3a2 100644
--- a/internal/lsp/regtest/definition_test.go
+++ b/internal/lsp/regtest/definition_test.go
@@ -81,13 +81,21 @@
name, _ := env.GoToDefinition("main.go", env.RegexpSearch("main.go", `fmt.(Printf)`))
env.OpenFile(name)
- name, pos := env.GoToDefinition(name, env.RegexpSearch(name, `(newPrinter)\(\)`))
+ pos := env.RegexpSearch(name, `:=\s*(newPrinter)\(\)`)
+
+ // Check that we can find references on a reference
+ refs := env.References(name, pos)
+ if len(refs) < 5 {
+ t.Errorf("expected 5+ references to newPrinter, found: %#v", refs)
+ }
+
+ name, pos = env.GoToDefinition(name, pos)
content, _ := env.Hover(name, pos)
if !strings.Contains(content.Value, "newPrinter") {
t.Fatal("definition of newPrinter went to the incorrect place")
}
-
- refs := env.References(name, pos)
+ // And on the definition too.
+ refs = env.References(name, pos)
if len(refs) < 5 {
t.Errorf("expected 5+ references to newPrinter, found: %#v", refs)
}
diff --git a/internal/lsp/source/implementation.go b/internal/lsp/source/implementation.go
index 5227ad0..76a27a0 100644
--- a/internal/lsp/source/implementation.go
+++ b/internal/lsp/source/implementation.go
@@ -216,7 +216,7 @@
}
path := pathEnclosingObjNode(astFile, pos)
if path == nil {
- return nil, ErrNoIdentFound
+ continue
}
var objs []types.Object
switch leaf := path[0].(type) {