This test checks that we correctly determine pkgsite links for various
identifiers.
We should only produce links that work, meaning the object is reachable via the
package's public API.
-- go.mod --
module mod.com
go 1.18
-- p.go --
package p
type E struct {
Embed int64
}
// T is in the package scope, and so should be linkable.
type T struct{ //@hover("T", "T", T)
// Only exported fields should be linkable
f int64 //@hover("f", "f", f)
F int64 //@hover("F", "F", F)
E
// TODO(rfindley): is the link here correct? It ignores N.
N struct {
// Nested fields should also be linkable.
Nested int64 //@hover("Nested", "Nested", Nested)
}
}
// M is an exported method, and so should be linkable.
func (T) M() {}
// m is not exported, and so should not be linkable.
func (T) m() {}
func _() {
var t T
// Embedded fields should be linkable.
_ = t.Embed //@hover("Embed", "Embed", Embed)
// Local variables should not be linkable, even if they are capitalized.
var X int64 //@hover("X", "X", X)
_ = X
// Local types should not be linkable, even if they are capitalized.
type Local struct { //@hover("Local", "Local", Local)
E
}
// But the embedded field should still be linkable.
var l Local
_ = l.Embed //@hover("Embed", "Embed", Embed)
}
-- @Embed --
```go
field Embed int64
```
[`(p.E).Embed` on pkg.go.dev](https://pkg.go.dev/mod.com#E.Embed)
-- @F --
```go
field F int64 // size=8, offset=8
```
@hover("F", "F", F)
[`(p.T).F` on pkg.go.dev](https://pkg.go.dev/mod.com#T.F)
-- @Local --
```go
type Local struct { // size=8
E
}
```
Local types should not be linkable, even if they are capitalized.
```go
// Embedded fields:
Embed int64 // through E
```
-- @Nested --
```go
field Nested int64 // size=8, offset=0
```
Nested fields should also be linkable.
-- @T --
```go
type T struct { // size=32 (0x20)
f int64 //@hover("f", "f", f)
F int64 //@hover("F", "F", F)
E
// TODO(rfindley): is the link here correct? It ignores N.
N struct {
// Nested fields should also be linkable.
Nested int64 //@hover("Nested", "Nested", Nested)
}
}
```
T is in the package scope, and so should be linkable.
```go
// Embedded fields:
Embed int64 // through E
```
```go
func (T) M()
func (T) m()
```
[`p.T` on pkg.go.dev](https://pkg.go.dev/mod.com#T)
-- @X --
```go
var X int64
```
Local variables should not be linkable, even if they are capitalized.
-- @f --
```go
field f int64 // size=8, offset=0
```
@hover("f", "f", f)