1
0
mirror of https://github.com/golang/go synced 2024-11-18 20:14:43 -07:00
go/internal/lsp/source
Muir Manders a27fdba277 internal/lsp: check all package variants in find-implementations
We previously only searched for implementations of the object we found
in the "widest" package variant. We instead need to search all
variants because each variant is type checked separately, and
implementations can be located in packages associated with different
variants.

For example, say you have:

-- foo/foo.go --
package foo
type Foo int
type Fooer interface { Foo() Foo }

-- foo/foo_test.go --
package foo
func TestFoo(t *testing.T) {}

-- bar/bar.go --
package bar
import "foo"
type impl struct {}
func (impl) Foo() foo.Foo { return 0 }

When you run find-implementations on the Fooer interface, we
previously would start from the (widest) foo.test's Fooer named
type. Unfortunately bar imports foo, not foo.test, so bar.impl
does not implement foo.test.Fooer. The specific reason is that
bar.impl.Foo returns foo.Foo, whereas foo.test.Fooer.Foo returns
foo.test.Foo, which are distinct *types.Named objects.

Starting our search instead from foo.Fooer resolves this issue.
However, we also need to search from foo.test.Fooer so we match any
implementations in foo_test.go.

Change-Id: I0b0039c98925410751c8f643c8ebd185340e409f
Reviewed-on: https://go-review.googlesource.com/c/tools/+/210459
Run-TryBot: Muir Manders <muir@mnd.rs>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-12-11 21:44:05 +00:00
..
comment_test.go internal/lsp: convert comments to markdown before sending to client 2019-10-04 18:35:38 +00:00
comment.go internal/lsp: convert comments to markdown before sending to client 2019-10-04 18:35:38 +00:00
completion_format.go internal/lsp/source: extract helper, improve error messages 2019-12-04 19:34:30 +00:00
completion_keywords.go internal/lsp: suggest "fallthrough" only inside switches 2019-12-10 22:10:49 +00:00
completion_labels.go internal/lsp: fix label completion in range and type switch stmts 2019-10-22 21:33:09 +00:00
completion_literal.go internal/span: support line directives 2019-11-25 19:20:43 +00:00
completion_snippet.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
completion.go internal/lsp: add comment completions for exported vars 2019-12-10 22:11:41 +00:00
deep_completion.go internal/lsp/source: attach Package to completions when available 2019-11-05 20:21:09 +00:00
diagnostics.go internal/lsp: add error handling for self imports 2019-12-06 19:13:54 +00:00
errors.go internal/lsp: move the missing imports handling into the metadata 2019-09-25 23:05:17 +00:00
folding_range.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00
format.go internal/lsp/source: optimize computeFixEdits 2019-12-06 20:21:26 +00:00
highlight.go internal/lsp: fix control flow highlighting taking precedence 2019-12-09 20:59:57 +00:00
hover.go internal/lsp: expose godoc or pkg.go.dev link on hover 2019-12-05 20:53:10 +00:00
identifier.go internal/lsp: check all package variants in find-implementations 2019-12-11 21:44:05 +00:00
implementation.go internal/lsp: check all package variants in find-implementations 2019-12-11 21:44:05 +00:00
options.go internal/lsp: link to the new pkg.go.dev instead of godoc.org 2019-11-30 07:06:09 +00:00
references.go internal/lsp: respect References.IncludeDeclaration setting 2019-12-06 20:05:57 +00:00
rename_check.go internal/lsp: improve literal func completion candidates 2019-11-07 21:18:00 +00:00
rename.go internal/lsp: respect References.IncludeDeclaration setting 2019-12-06 20:05:57 +00:00
signature_help.go internal/lsp/source: extract helper, improve error messages 2019-12-04 19:34:30 +00:00
source_test.go internal/lsp: check all package variants in find-implementations 2019-12-11 21:44:05 +00:00
suggested_fix.go internal/lsp: move error range computations into cache package 2019-10-21 22:12:58 +00:00
symbols.go internal/lsp: propagate errors through source.DocumentSymbols 2019-12-05 01:21:29 +00:00
tidy.go internal/lsp: support running go mod tidy as a code action 2019-09-20 13:08:46 +00:00
util.go internal/lsp: check all package variants in find-implementations 2019-12-11 21:44:05 +00:00
view.go internal/lsp: refactor and clean up text synchronization 2019-12-05 13:33:40 +00:00