Skip to content

x/tools/gopls: get signature when cursor is over the function name #68922

Closed
@crazyhulk

Description

@crazyhulk

gopls version

Build info

golang.org/x/tools/gopls v0.16.1
golang.org/x/tools/gopls@v0.16.1 h1:1hO/dCeUvjEYx3V0rVvCtOkwnpEpqS29paE+Jw4dcAc=
github.com/BurntSushi/toml@v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/google/go-cmp@v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
golang.org/x/exp/typeparams@v0.0.0-20221212164502-fae10dda9338 h1:2O2DON6y3XMJiQRAS1UWU+54aec2uopH3x7MAiqGW6Y=
golang.org/x/mod@v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
golang.org/x/sync@v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/telemetry@v0.0.0-20240607193123-221703e18637 h1:3Wt8mZlbFwG8llny+t18kh7AXxyWePFycXMuVdHxnyM=
golang.org/x/text@v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/tools@v0.22.1-0.20240628205440-9c895dd76b34 h1:Kd+Z5Pm6uwYx3T2KEkeHMHUMZxDPb/q6b1m+zEcy62c=
golang.org/x/vuln@v1.0.4 h1:SP0mPeg2PmGCu03V+61EcQiOjmpri2XijexKdzv8Z1I=
honnef.co/go/tools@v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs=
mvdan.cc/gofumpt@v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo=
mvdan.cc/xurls/v2@v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
go: go1.21.0

go env

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/zx/.cache/go-build'
GOENV='/home/zx/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/zx/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/zx/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.21.0'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/zx/workspace/go/tools/gopls/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build2830052148=/tmp/go-build -gno-record-gcc-switches'

What did you do?

I cannot get function signatures without the parentheses when use lsp."textDocument/signatureHelp" when I make a code snippet plugin for neovim.

cmp-sign

What did you see happen?

Get nil by exec lua vim.lsp.buf.signature_help() in the neovim when cursor over the function name.

image image

What did you expect to see?

We prefere to use "." to trigger a code complete menu, we also need the ability to retrieve function signatures when cursor over the function name.

image image

I have made a pull request to fix this.

Editor and settings

nvim, it works well.

Logs

No response

Activity

added
goplsIssues related to the Go language server, gopls.
ToolsThis label describes issues relating to any tools in the x/tools repository.
on Aug 17, 2024
added this to the Unreleased milestone on Aug 17, 2024
added a commit that references this issue on Aug 19, 2024
b4e98e7
changed the title [-]x/tools/gopls: get signature when cusor is over the function name[/-] [+]x/tools/gopls: get signature when cursor is over the function name[/+] on Aug 21, 2024
findleyr

findleyr commented on Aug 21, 2024

@findleyr
Member

Thanks, it seems reasonable to support this, and agree that it is a good help-wanted issue. Thanks for the contribution, we'll review your CL.

added a commit that references this issue on Aug 22, 2024
6a6dc56
adonovan

adonovan commented on Aug 22, 2024

@adonovan
Member

I agree that the feature seems like a reasonable interpretation of SignatureHelp and its SignatureInformation result type, which represents "the signature of something callable".

crazyhulk

crazyhulk commented on Aug 23, 2024

@crazyhulk
Author

I agree that the feature seems like a reasonable interpretation of SignatureHelp and its SignatureInformation result type, which represents "the signature of something callable".

/**

  • Signature help represents the signature of something
  • callable. There can be multiple signature but only one
  • active and only one active parameter.
    */

Callable, not calling?

" Signature help represents the signature of something callable." which refers to the entire set of method, sel, function, etc.

Gopls provides tremendous help while we write code, consider the following situation:

func foo(a, b int) int {
}

foo.

I want a complete menu here, and I must call foo.
In this situation, if signature help is provided only after I’ve completed writing the function, it’s no longer useful.

In other words, we should provide function signatures for everything that is callable, not just for functions that are already being called.

adonovan

adonovan commented on Aug 23, 2024

@adonovan
Member

We agree. :-)

gopherbot

gopherbot commented on Aug 24, 2024

@gopherbot
Contributor

Change https://go.dev/cl/605983 mentions this issue: SignatureHelp: report signature of Ident if no enclosing CallExpr

added a commit that references this issue on Aug 30, 2024
adfca30
added a commit that references this issue on Sep 12, 2024
fa8ad21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.help wanted

Type

No type

Projects

No projects

Relationships

None yet

    Development

    Participants

    @adonovan@gopherbot@crazyhulk@findleyr@gabyhelp

    Issue actions

      x/tools/gopls: get signature when cursor is over the function name · Issue #68922 · golang/go