| 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 int |
| } |
| |
| // 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 int //@hover("f", "f", f) |
| F int //@hover("F", "F", F) |
| |
| E |
| |
| // TODO(rfindley): is the link here correct? It ignores N. |
| N struct { |
| // Nested fields should also be linkable. |
| Nested int //@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 int //@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/hover.md -- |
| ```go |
| field Embed int |
| ``` |
| |
| [`(p.E).Embed` on pkg.go.dev](https://pkg.go.dev/mod.com#E.Embed) |
| -- @F/hover.md -- |
| ```go |
| field F int |
| ``` |
| |
| @hover("F", "F", F) |
| |
| |
| [`(p.T).F` on pkg.go.dev](https://pkg.go.dev/mod.com#T.F) |
| -- @Local/hover.md -- |
| ```go |
| type Local struct { |
| E |
| } |
| ``` |
| |
| Local types should not be linkable, even if they are capitalized. |
| -- @Nested/hover.md -- |
| ```go |
| field Nested int |
| ``` |
| |
| Nested fields should also be linkable. |
| -- @T/hover.md -- |
| ```go |
| type T struct { |
| f int //@hover("f", "f", f) |
| F int //@hover("F", "F", F) |
| |
| E |
| |
| // TODO(rfindley): is the link here correct? It ignores N. |
| N struct { |
| // Nested fields should also be linkable. |
| Nested int //@hover("Nested", "Nested", Nested) |
| } |
| } |
| |
| func (T).M() |
| func (T).m() |
| ``` |
| |
| T is in the package scope, and so should be linkable. |
| |
| |
| [`p.T` on pkg.go.dev](https://pkg.go.dev/mod.com#T) |
| -- @X/hover.md -- |
| ```go |
| var X int |
| ``` |
| |
| Local variables should not be linkable, even if they are capitalized. |
| -- @f/hover.md -- |
| ```go |
| field f int |
| ``` |
| |
| @hover("f", "f", f) |