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 <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
This commit is contained in:
Rebecca Stambler 2019-12-16 22:18:38 -05:00
parent 640059499b
commit 38570b7665
5 changed files with 35 additions and 17 deletions

View File

@ -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()
}
}
}
}

View File

@ -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)
}

View File

@ -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```"

View File

@ -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```"

View File

@ -11,7 +11,7 @@ FoldingRangesCount = 2
FormatCount = 6
ImportCount = 7
SuggestedFixCount = 1
DefinitionsCount = 41
DefinitionsCount = 42
TypeDefinitionsCount = 2
HighlightsCount = 44
ReferencesCount = 7