gopls/hover: show named func type doc when hovering over func literal - #634
gopls/hover: show named func type doc when hovering over func literal#634abhay1999 wants to merge 1 commit into
Conversation
When a func literal is implicitly converted to a named function type
(e.g. fs.WalkDirFunc), hovering over its "func" keyword now shows the
documentation and signature of that named type, with a link to pkg.go.dev.
Previously, hovering over "func" in:
filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
...
})
showed only the anonymous signature "func(path string, d fs.DirEntry,
err error) error". Now it shows the docs for fs.WalkDirFunc, which is
often the information the user actually wants.
Implementation:
- Detect the case in the hover switch: when cur.Node() is *ast.FuncType
and the cursor is at the "func" token and the parent is a *ast.FuncLit.
- Use typesutil.TypesFromContext to find the named function type the
literal must satisfy.
- Load the declaring package and build a hoverResult with the named
type's documentation, signature, and pkg.go.dev link.
- If no named type is found, fall back to the existing anonymous-type
hover behavior.
Add a marker test in hover/funclittype.txt covering both cases.
Fixes golang/go#76191
|
This PR (HEAD: 82a1fea) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/tools/+/764120. Important tips:
|
|
Message from Gopher Robot: Patch Set 1: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from Abhay Chaurasiya: Patch Set 1: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from Hongxiang Jiang: Patch Set 2: Commit-Queue+1 (3 comments) Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 2: Dry run: CV is trying the patch. Bot data: {"action":"start","triggered_at":"2026-05-25T20:35:27Z","revision":"06dcb97ae9df557cc4bb869514f847f0aa400dbf"} Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from Hongxiang Jiang: Patch Set 2: -Commit-Queue (Performed by <GERRIT_ACCOUNT_60063> on behalf of <GERRIT_ACCOUNT_3494492>) Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 2: This CL has failed the run. Reason: Tryjob golang/try/x_tools-gotip-linux-arm64-boringcrypto has failed with summary (view all results):
To reproduce, try Additional links for debugging: Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 2: LUCI-TryBot-Result-1 Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from Hongxiang Jiang: Patch Set 2: Commit-Queue+1 (2 comments) Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 2: Dry run: CV is trying the patch. Bot data: {"action":"start","triggered_at":"2026-05-25T20:47:54Z","revision":"06dcb97ae9df557cc4bb869514f847f0aa400dbf"} Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from Hongxiang Jiang: Patch Set 2: -Commit-Queue (Performed by <GERRIT_ACCOUNT_60063> on behalf of <GERRIT_ACCOUNT_3494492>) Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 2: This CL has failed the run. Reason: Tryjob golang/try/x_tools-gotip-linux-arm64 has failed with summary (view all results):
To reproduce, try Additional links for debugging: Please don’t reply on this GitHub thread. Visit golang.org/cl/764120. |
When a func literal is implicitly converted to a named function type
(e.g. fs.WalkDirFunc), hovering over its "func" keyword now shows the
documentation and signature of that named type, with a link to
pkg.go.dev.
Previously, hovering over "func" in:
showed only the anonymous signature. Now it shows the docs for
fs.WalkDirFunc, which is often the information the user actually wants.
Implementation: when cur.Node() is *ast.FuncType with the cursor at the
"func" token and the parent is a *ast.FuncLit, the new hoverFuncLit
function calls typesutil.TypesFromContext to find the named function
type the literal must satisfy, loads the declaring package via
NarrowestDeclaringPackage, and returns a hoverResult with the named
type's documentation, signature, and pkg.go.dev link. If no named type
is found, it falls back to the existing anonymous-type hover behavior.
Note: FindByPos at a FuncLit's "func" token returns the inner
*ast.FuncType node (not *ast.FuncLit), so the code checks the parent
node to detect the FuncLit context.
A marker test is added in hover/funclittype.txt covering both the
named-type case and the fallback case.
Fixes golang/go#76191