Skip to content

x/tools/gopls: improve method rename functionality in face of errors #71908

Open
@danvolchek

Description

gopls version

Build info

golang.org/x/tools/gopls v0.18.0
golang.org/x/tools/[email protected] h1:oBmnrmi0Uk7Ea+ZPK16BdcjnpEJX8ciBCSp9S90GULo=
github.com/BurntSushi/[email protected] h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs=
github.com/google/[email protected] h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
golang.org/x/exp/[email protected] h1:1xaZTydL5Gsg78QharTwKfA9FY9CZ1VQj6D/AZEvHR0=
golang.org/x/[email protected] h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
golang.org/x/[email protected] h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
golang.org/x/[email protected] h1:L2k9GUV2TpQKVRGMjN94qfUMgUwOFimSQ6gipyJIjKw=
golang.org/x/[email protected] h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/[email protected] h1:4+it9JYqVd2wIAapscAb5mUAI1yHY0u4B4idYPigWeE=
golang.org/x/[email protected] h1:NPGnvPOTgnjBc9HTaUx+nj+EaUYxl5SJOWqaDYGaFYw=
honnef.co/go/[email protected] h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I=
mvdan.cc/[email protected] h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
mvdan.cc/xurls/[email protected] h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
go: go1.24.0

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/dan/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/dan/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build274943017=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/home/dan/Desktop/Stuff/development/go-rw2/go.mod'
GOMODCACHE='/home/dan/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/dan/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/lib/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/dan/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/lib/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.0'
GOWORK=''
PKG_CONFIG='pkg-config'

What did you do?

Using vscode, right clicked a method on a type, clicked rename symbol, typed in the new symbol name. In this case, a file in the same package had errors, but not the file containing the renaming

Minimal repro of the file layout: https://go.dev/play/p/FlfMX-TSaGt

What did you see happen?

renaming "doFoo" to "reallyDoFoo" not possible because "foobar.go" in "play.ground/foo" has errors

What did you expect to see?

I expected the renaming to succeed. Renaming doFoo does not affect foobar.go at all - foobar.go does not reference doFoo anywhere.

I'm mostly used to IntelliJ IDEA and my license expired so I can't test, I'm pretty sure it succeeded the renaming in this case.

Or rather, I've never had a renaming fail that I can remember when using IntelliJ, but when using vscode/gopls I run into this error multiple times per day because I'm starting a new project and a lot of files are changing at once - it's frustrating!

Editor and settings

Vscode: code -v:

1.97.2
e54c774e0add60467559eb0d1e229c6452cf8447
x64

settings.json:

{
    "gopls": {
        "ui.diagnostic.staticcheck": true
    },
    "[go]": {
        "editor.formatOnSave": true
    },
    "go.toolsManagement.autoUpdate": true
}

Go extension version 0.44.0.

Logs

(verbose logging enabled)

[Trace - 16:53:26.525 PM] Sending request 'textDocument/prepareRename - (45)'.
Params: {"textDocument":{"uri":"file:///path/to/code/foo/foo.go"},"position":{"line":5,"character":16}}


[Trace - 16:53:26.526 PM] Received response 'textDocument/prepareRename - (45)' in 0ms.
Result: {"range":{"start":{"line":5,"character":14},"end":{"line":5,"character":19}},"placeholder":"doFoo"}


[Trace - 16:53:29.131 PM] Sending request 'textDocument/rename - (46)'.
Params: {"textDocument":{"uri":"file:///path/to/code/foo/foo.go"},"position":{"line":5,"character":16},"newName":"reallyDoFoo"}


[Error - Received] 16:53:29.131 PM #46 renaming "doFoo" to "reallyDoFoo" not possible because "foobar.go" in "play.ground/foo" has errors


[Error - 4:53:29 PM] Request textDocument/rename failed.
  Message: renaming "doFoo" to "reallyDoFoo" not possible because "foobar.go" in "play.ground/foo" has errors
  Code: 0 

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    ToolProposalIssues describing a requested change to a Go tool or command-line program.ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions