golang/go

x/tools/gopls: code action declare missing method does not infer return type from append or map key

Open

#75.614 aberto em 25 de set. de 2025

Ver no GitHub
 (3 comments) (0 reactions) (0 assignees)Go (19.008 forks)batch import
Toolsgoplshelp wanted

Métricas do repositório

Stars
 (133.883 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

Go version

go version go1.25.1 linux/amd64

Output of go env in your module/workspace:

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

What did you do?

If we have the following code:

package main

type Foo struct{}

func main() {
	var i int
	var f Foo
	var d []int
	var m map[int]int

	i = f.GetInt()
	d = append(d, f.GetInt())
	m[f.GetInt()] = i
}

We get code actions for:

  • i = f.GetInt()
  • d = append(d, f.GetInt())
  • m[f.GetInt()] = i

In all three cases, it can be inferred from context that f.GetInt() should return an int.

When we run code action "Declare missing method Foo.GetInt()" for i = f.GetInt(), we get the following function, correctly returning int:

func (f Foo) GetInt() int {
	panic("unimplemented")
}

What did you see happen?

When we run code action "Declare missing method Foo.GetInt()" for d = append(d, f.GetInt()) or m[f.GetInt()] = i, we get the following function, with no return parameters, which is incompatible with the context where it was used:

func (f Foo) GetInt() {
	panic("unimplemented")
}

What did you expect to see?

A function declaration correctly returning an int:

func (f Foo) GetInt() int {
	panic("unimplemented")
}

Guia do colaborador