Skip to content

x/tools/gopls: "yield may be called again" false positive #75924

@mvdan

Description

@mvdan

What did you do?

env HOME=${WORK}/.home

exec gopls check f.go

-- f.go --
package p

import (
	"iter"
	"strings"
)

func Seq(list []string, trimSpace bool) iter.Seq[string] {
	return func(yield func(string) bool) {
		for _, s := range list {
			var ok bool
			if trimSpace {
				ok = yield(strings.TrimSpace(s))
			} else {
				ok = yield(s)
			}
			if !ok {
				return
			}
		}
	}
}

What did you expect to see?

No warning; the code above is correct.

What did you see instead?

A false positive:

> exec gopls check f.go
[stdout]
$WORK/f.go:13:15: yield may be called again after returning false
$WORK/f.go:15:15: yield may be called again (on L13) after returning false

Build info

golang.org/x/tools/gopls v0.0.0-20251010213223-d2096d10b82e
    golang.org/x/tools/gopls@v0.0.0-20251010213223-d2096d10b82e h1:Oem8QicF+WKAPEX42lIWm2Y4JzI8/LtPxkSfKYiCMaY=
    github.com/BurntSushi/toml@v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
    github.com/fatih/camelcase@v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
    github.com/fatih/gomodifytags@v1.17.1-0.20250423142747-f3939df9aa3c h1:dDSgAjoOMp8da3egfz0t2S+t8RGOpEmEXZubcGuc0Bg=
    github.com/fatih/structtag@v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
    github.com/fsnotify/fsnotify@v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
    github.com/google/go-cmp@v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
    github.com/google/jsonschema-go@v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q=
    github.com/modelcontextprotocol/go-sdk@v0.8.0 h1:jdsBtGzBLY287WKSIjYovOXAqtJkP+HtFQFKrZd4a6c=
    github.com/yosida95/uritemplate/v3@v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
    golang.org/x/exp/typeparams@v0.0.0-20251002181428-27f1f14c8bb9 h1:EvjuVHWMoRaAxH402KMgrQpGUjoBy/OWvZjLOqQnwNk=
    golang.org/x/mod@v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
    golang.org/x/sync@v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
    golang.org/x/sys@v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
    golang.org/x/telemetry@v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU=
    golang.org/x/text@v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
    golang.org/x/tools@v0.38.1-0.20251010213223-d2096d10b82e h1:xl3hOzOrMPLZlgmULgxqR6jM6F0h7EoO34O4+OgraJI=
    golang.org/x/vuln@v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I=
    honnef.co/go/tools@v0.7.0-0.dev.0.20250523013057-bbc2f4dd71ea h1:fj8r9irJSpolAGUdZBxJIRY3lLc4jH2Dt4lwnWyWwpw=
    mvdan.cc/gofumpt@v0.8.0 h1:nZUCeC2ViFaerTcYKstMmfysj6uhQrA2vJe+2vwGU6k=
    mvdan.cc/xurls/v2@v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
go: go1.26-devel_8aa1efa223 2025-10-11 08:51:54 -0700

cc @golang/tools-team

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugReportIssues describing a possible bug in the Go implementation.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