golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
121.14k stars 17.36k forks source link

x/tools/gopls: "unexpected file: %q" bug.Report in bestView (reported by telemetry) #67288

Open adonovan opened 1 month ago

adonovan commented 1 month ago

This stack FC7EOg was reported by telemetry:

// matches reports whether the port matches a file with the given absolute path
// and content.
...
func (p port) matches(path string, content []byte) bool {
...
    // The only virtualized operation called by MatchFile is OpenFile.
    ctxt.OpenFile = func(p string) (io.ReadCloser, error) {
        if p != path {
            return nil, bug.Errorf("unexpected file %q", p)
        }
        return io.NopCloser(bytes.NewReader(content)), nil
    }
...
gopls/bug
golang.org/x/tools/gopls/internal/util/bug.report:+35
golang.org/x/tools/gopls/internal/util/bug.Errorf:+2
golang.org/x/tools/gopls/internal/cache.port.matches.func1:+2
go/build.(*Context).openFile:+2
go/build.(*Context).matchFile:+27
go/build.(*Context).MatchFile:=1398
golang.org/x/tools/gopls/internal/cache.port.matches:+15
golang.org/x/tools/gopls/internal/cache.bestView[...]:+23
golang.org/x/tools/gopls/internal/cache.selectViewDefs:+53
golang.org/x/tools/gopls/internal/cache.(*Session).DidModifyFiles:+88
golang.org/x/tools/gopls/internal/server.(*server).didModifyFiles:+36
golang.org/x/tools/gopls/internal/server.(*server).DidOpen:+20
golang.org/x/tools/gopls/internal/protocol.serverDispatch:+253
golang.org/x/tools/gopls/internal/lsprpc.(*streamServer).ServeStream.ServerHandler.func3:+5
golang.org/x/tools/gopls/internal/lsprpc.(*streamServer).ServeStream.handshaker.func4:+52
golang.org/x/tools/gopls/internal/protocol.Handlers.MustReplyHandler.func1:+2
golang.org/x/tools/gopls@v0.15.3 go1.22.2 darwin/arm64 neovim (1)

Issue created by golang.org/x/tools/gopls/internal/telemetry/cmd/stacks.

Dups: LJo3VQ

adonovan commented 1 month ago

This stack LJo3VQ was reported by telemetry:

gopls/bug
golang.org/x/tools/gopls/internal/util/bug.report:+35
golang.org/x/tools/gopls/internal/util/bug.Errorf:+2
golang.org/x/tools/gopls/internal/cache.port.matches.func1:+2
go/build.(*Context).openFile:+2
go/build.(*Context).matchFile:+27
go/build.(*Context).MatchFile:=1398
golang.org/x/tools/gopls/internal/cache.port.matches:+15
golang.org/x/tools/gopls/internal/cache.bestView[...]:+23
golang.org/x/tools/gopls/internal/cache.(*Session).viewOfLocked:+8
golang.org/x/tools/gopls/internal/cache.(*Session).DidModifyFiles:+133
golang.org/x/tools/gopls/internal/server.(*server).didModifyFiles:+36
golang.org/x/tools/gopls/internal/server.(*server).DidOpen:+20
golang.org/x/tools/gopls/internal/protocol.serverDispatch:+253
golang.org/x/tools/gopls/internal/lsprpc.(*streamServer).ServeStream.ServerHandler.func3:+5
golang.org/x/tools/gopls/internal/lsprpc.(*streamServer).ServeStream.handshaker.func4:+52
golang.org/x/tools/gopls/internal/protocol.Handlers.MustReplyHandler.func1:+2
golang.org/x/tools/gopls@v0.15.3 go1.22.2 linux/amd64 neovim (2)

Issue created by golang.org/x/tools/gopls/internal/telemetry/cmd/stacks.

findleyr commented 1 month ago

The build.MatchFile API is quite hard to use.

I don't know what this could be, but also don't think it's likely to be that impactful. Let's punt to the next milestone.