From 38570b7665dbc76b0187f095a53c5e03f321fec1 Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Mon, 16 Dec 2019 22:18:38 -0500 Subject: [PATCH] internal/lsp: fix links for interface methods This change handles fixes the link behavior for interface methods. For example, before this change, hovering on "Name" would point to an incorrect link: https://pkg.go.dev/go/types?tab=doc#object.Name. The correct link is https://pkg.go.dev/go/types?tab=doc#TypeName.Name. var typ *types.Named typ.Obj().Name() Change-Id: If28bff6069239d487e5d86cacafc20800493ebe8 Reviewed-on: https://go-review.googlesource.com/c/tools/+/211585 Run-TryBot: Rebecca Stambler TryBot-Result: Gobot Gobot Reviewed-by: Heschi Kreinick --- internal/lsp/source/hover.go | 8 +++++++- internal/lsp/testdata/godef/a/a.go | 4 ++++ internal/lsp/testdata/godef/a/a.go.golden | 18 +++++++++++++----- internal/lsp/testdata/godef/b/b.go.golden | 20 ++++++++++---------- internal/lsp/testdata/summary.txt.golden | 2 +- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/internal/lsp/source/hover.go b/internal/lsp/source/hover.go index 868c26574e..c032170876 100644 --- a/internal/lsp/source/hover.go +++ b/internal/lsp/source/hover.go @@ -110,7 +110,13 @@ func (i *IdentifierInfo) linkAndSymbolName() (string, string) { case *types.Struct: rTypeName = r.Name() case *types.Named: - rTypeName = rtyp.Obj().Name() + if named, ok := i.enclosing.(*types.Named); ok { + rTypeName = named.Obj().Name() + } else if !rtyp.Obj().Exported() { + return "", "" + } else { + rTypeName = rtyp.Obj().Name() + } } } } diff --git a/internal/lsp/testdata/godef/a/a.go b/internal/lsp/testdata/godef/a/a.go index 9db1deaed5..0ea47e35ff 100644 --- a/internal/lsp/testdata/godef/a/a.go +++ b/internal/lsp/testdata/godef/a/a.go @@ -4,6 +4,7 @@ package a import ( "fmt" + "go/types" "sync" ) @@ -22,4 +23,7 @@ func AStuff() { //@AStuff var mu sync.Mutex mu.Lock() //@Lock,hover("Lock", Lock) + + var typ *types.Named + typ.Obj().Name() //@Name,hover("Name", Name) } diff --git a/internal/lsp/testdata/godef/a/a.go.golden b/internal/lsp/testdata/godef/a/a.go.golden index 304e361d44..92ae96da62 100644 --- a/internal/lsp/testdata/godef/a/a.go.golden +++ b/internal/lsp/testdata/godef/a/a.go.golden @@ -6,6 +6,14 @@ Lock locks m\. ```go func (*sync.Mutex).Lock() ``` +-- Name-hover -- +Name returns the object\'s \(package\-local, unqualified\) name\. + +[`(types.TypeName).Name` on pkg.go.dev](https://pkg.go.dev/go/types#TypeName.Name) + +```go +func (*types.object).Name() string +``` -- Random-definition -- godef/a/random.go:3:6-12: defined here as [`a.Random` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#Random) @@ -67,7 +75,7 @@ func Random2(y int) int func Random2(y int) int ``` -- err-definition -- -godef/a/a.go:17:6-9: defined here as ```go +godef/a/a.go:18:6-9: defined here as ```go var err error ``` -- err-definition-json -- @@ -75,14 +83,14 @@ var err error "span": { "uri": "file://godef/a/a.go", "start": { - "line": 17, + "line": 18, "column": 6, - "offset": 216 + "offset": 228 }, "end": { - "line": 17, + "line": 18, "column": 9, - "offset": 219 + "offset": 231 } }, "description": "```go\nvar err error\n```" diff --git a/internal/lsp/testdata/godef/b/b.go.golden b/internal/lsp/testdata/godef/b/b.go.golden index f298f150b5..46c3e12abb 100644 --- a/internal/lsp/testdata/godef/b/b.go.golden +++ b/internal/lsp/testdata/godef/b/b.go.golden @@ -1,5 +1,5 @@ -- A-definition -- -godef/a/a.go:10:6-7: defined here as [`a.A` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#A) +godef/a/a.go:11:6-7: defined here as [`a.A` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#A) ```go A string //@A @@ -10,14 +10,14 @@ A string //@A "span": { "uri": "file://godef/a/a.go", "start": { - "line": 10, + "line": 11, "column": 6, - "offset": 88 + "offset": 100 }, "end": { - "line": 10, + "line": 11, "column": 7, - "offset": 89 + "offset": 101 } }, "description": "[`a.A` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#A)\n\n```go\nA string //@A\n\n```" @@ -61,7 +61,7 @@ package a ("golang.org/x/tools/internal/lsp/godef/a") package a ("golang.org/x/tools/internal/lsp/godef/a") ``` -- AStuff-definition -- -godef/a/a.go:12:6-12: defined here as [`a.AStuff` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#AStuff) +godef/a/a.go:13:6-12: defined here as [`a.AStuff` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#AStuff) ```go func a.AStuff() @@ -71,14 +71,14 @@ func a.AStuff() "span": { "uri": "file://godef/a/a.go", "start": { - "line": 12, + "line": 13, "column": 6, - "offset": 108 + "offset": 120 }, "end": { - "line": 12, + "line": 13, "column": 12, - "offset": 114 + "offset": 126 } }, "description": "[`a.AStuff` on pkg.go.dev](https://pkg.go.dev/golang.org/x/tools/internal/lsp/godef/a#AStuff)\n\n```go\nfunc a.AStuff()\n```" diff --git a/internal/lsp/testdata/summary.txt.golden b/internal/lsp/testdata/summary.txt.golden index b96f1d6f80..a9a8c6e91e 100644 --- a/internal/lsp/testdata/summary.txt.golden +++ b/internal/lsp/testdata/summary.txt.golden @@ -11,7 +11,7 @@ FoldingRangesCount = 2 FormatCount = 6 ImportCount = 7 SuggestedFixCount = 1 -DefinitionsCount = 41 +DefinitionsCount = 42 TypeDefinitionsCount = 2 HighlightsCount = 44 ReferencesCount = 7