Skip to content

x/tools/gopls: no autocompletion when missing closing parenthesis #73426

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
gnojus opened this issue Apr 17, 2025 · 4 comments
Open

x/tools/gopls: no autocompletion when missing closing parenthesis #73426

gnojus opened this issue Apr 17, 2025 · 4 comments
Labels
FeatureRequest Issues asking for a new feature that does not need a proposal. gopls/parsing Issues related to parsing / poor parser recovery. gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@gnojus
Copy link

gnojus commented Apr 17, 2025

gopls version

Build info

golang.org/x/tools/gopls v0.18.1
golang.org/x/tools/gopls@v0.18.1 h1:2xJBNzdImS5u/kV/ZzqDLSvlBSeZX+pWY9uKVP7Pask=
github.com/BurntSushi/toml@v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs=
github.com/google/go-cmp@v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
golang.org/x/exp/typeparams@v0.0.0-20241210194714-1829a127f884 h1:1xaZTydL5Gsg78QharTwKfA9FY9CZ1VQj6D/AZEvHR0=
golang.org/x/mod@v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
golang.org/x/sync@v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
golang.org/x/telemetry@v0.0.0-20241220003058-cc96b6e0d3d9 h1:L2k9GUV2TpQKVRGMjN94qfUMgUwOFimSQ6gipyJIjKw=
golang.org/x/text@v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/tools@v0.30.1-0.20250221230316-5055f70f240c h1:Ja/5gV5a9Vvho3p2NC/T2TtxhHjrWS/2DvCKMvA0a+Y=
golang.org/x/vuln@v1.1.3 h1:NPGnvPOTgnjBc9HTaUx+nj+EaUYxl5SJOWqaDYGaFYw=
honnef.co/go/tools@v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I=
mvdan.cc/gofumpt@v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
mvdan.cc/xurls/v2@v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
go: go1.24.2

go env

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

What did you do?

Typed some Go code, with last keystrokes typing foo(ba

package p

func _() {
        foo(ba<cursor>
}

const bar = 0

func foo(int) {}

What did you see happen?

No autocomplete for bar.

What did you expect to see?

Autocomplete for bar, like I see when the line has a closing parenthesis: foo(ba<cursor>)

Editor and settings

Neovim v0.10.4

Logs

No response

@gnojus gnojus added gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository. labels Apr 17, 2025
@gopherbot gopherbot added this to the Unreleased milestone Apr 17, 2025
@gabyhelp gabyhelp added the FeatureRequest Issues asking for a new feature that does not need a proposal. label Apr 17, 2025
@findleyr findleyr added the gopls/parsing Issues related to parsing / poor parser recovery. label Apr 17, 2025
@h9jiang
Copy link
Member

h9jiang commented Apr 23, 2025

I was able to reproduce the symptom using the snippet provided above. However if the foo(ba is in the bottom, the autocompletion works.

Image Image

Since findleyr has added the parsing label, I assume you already know what is the issue? @findleyr

@h9jiang h9jiang modified the milestones: Unreleased, gopls/backlog Apr 24, 2025
@xieyuschen
Copy link
Contributor

xieyuschen commented May 2, 2025

@h9jiang The difference you found is caused by go parser. All declarations after foo( will be recognized as expression rather than valid symbols. The declarations before foo( won't be affected. As a result, the bar is suggested in your code snippet but won't work in user's snippet.

I believe this is an issue about how does gopls fix the source, for example, in what scenarios gopls automatically adds a right parenthesis to make parser produces more correct ast structures.

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/669475 mentions this issue: gopls/internal/cache/parsego: offer completion when missing closing parenthesis

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
FeatureRequest Issues asking for a new feature that does not need a proposal. gopls/parsing Issues related to parsing / poor parser recovery. gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository.
Projects
None yet
Development

No branches or pull requests

6 participants