Skip to content
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

x/tools/gopls: high cpu usage all the time #70172

Open
newhook opened this issue Nov 2, 2024 · 18 comments
Open

x/tools/gopls: high cpu usage all the time #70172

newhook opened this issue Nov 2, 2024 · 18 comments
Labels
gopls/imports gopls Issues related to the Go language server, gopls. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@newhook
Copy link

newhook commented Nov 2, 2024

gopls version

0.16.2

go env

GO111MODULE=''
GOARCH='arm64'
GOBIN='/Users/matthew/.local/share/mise/installs/go/1.22.3/bin'
GOCACHE='/Users/matthew/Library/Caches/go-build'
GOENV='/Users/matthew/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS='-buildvcs=false'
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/matthew/go/pkg/mod'
GONOPROXY='github.com/customerio/*'
GONOSUMDB='github.com/customerio/*'
GOOS='darwin'
GOPATH='/Users/matthew/go'
GOPRIVATE='github.com/customerio/*'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/matthew/.local/share/mise/installs/go/1.22.3'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/matthew/.local/share/mise/installs/go/1.22.3/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.3'
GCCGO='gccgo'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/matthew/services/go.mod'
GOWORK=''
CGO_CFLAGS='-I/Users/matthew/.local/lib/foundationdb/7.3.26/usr/local/include'
CGO_CPPFLAGS='-I/Users/matthew/.local/lib/foundationdb/7.3.26/usr/local/include'
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-L/Users/matthew/.local/lib/foundationdb/7.3.26/usr/local/lib'
PKG_CONFIG='/opt/homebrew/bin/pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/md/zrgmx7p53159906_lsrbfykc0000gn/T/go-build2676139738=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

open cursor on a go project. goplus is constantly at 200-400% cpu, even if I'm not doing anything.

What did you see happen?

high cpu usage.

What did you expect to see?

not high cpu usage.

Editor and settings

No response

Logs

No response

@newhook newhook 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 Nov 2, 2024
@gopherbot gopherbot added this to the Unreleased milestone Nov 2, 2024
@adonovan
Copy link
Member

adonovan commented Nov 4, 2024

Is the workspace open source code? If so, can you tell us what repo/commit triggers the bug?
Does it do this only when you open certain files?
Does it eventually stabilize?
How large is the repository?
Can you share the output of gopls -stats?

Thanks.

@newhook
Copy link
Author

newhook commented Nov 5, 2024

The source code is closed source and it is ~1mio loc. The issue doesn't appear to be related to open files since it occurs even if I have no files open. On startup I can see it running go alot (I guess running go list), and then evetually that stops and It stablizes at 400% CPU.

@adonovan
Copy link
Member

adonovan commented Nov 5, 2024

Were you able to get the output of gopls -stats?

@newhook
Copy link
Author

newhook commented Nov 7, 2024

gopls stats
Initializing workspace...     done (32.042606375s)
Gathering bug reports...      done (133.127417ms)
Querying memstats...          done (441.686209ms)
Querying workspace stats...   done (24.08725ms)
Collecting directory info...  done (791.441333ms)
{
  "BugReports": [],
  "CacheDir": "/Users/matthew/Library/Caches/gopls/81dd27fb",
  "DirStats": {
    "Files": 11331,
    "TestdataFiles": 2787,
    "GoFiles": 4336,
    "ModFiles": 2,
    "Dirs": 2306
  },
  "GOARCH": "arm64",
  "GOOS": "darwin",
  "GOPACKAGESDRIVER": "",
  "GOPLSCACHE": "",
  "GoVersion": "go1.22.3",
  "GoplsVersion": "v0.16.2",
  "InitialWorkspaceLoadDuration": "32.042606375s",
  "MemStats": {
    "HeapAlloc": 699766776,
    "HeapInUse": 1085841408,
    "TotalAlloc": 6352233008
  },
  "WorkspaceStats": {
    "Files": {
      "Total": 10780,
      "Largest": 1379000,
      "Errs": 0
    },
    "Views": [
      {
        "GoCommandVersion": "go1.22.3",
        "AllPackages": {
          "Packages": 3705,
          "LargestPackage": 155,
          "CompiledGoFiles": 23115,
          "Modules": 255
        },
        "WorkspacePackages": {
          "Packages": 972,
          "LargestPackage": 91,
          "CompiledGoFiles": 4920,
          "Modules": 1
        },
        "Diagnostics": 0
      }
    ]
  }
}

@ansaba ansaba added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Nov 7, 2024
@findleyr
Copy link
Member

findleyr commented Nov 7, 2024

Gopls should (eventually) stop consuming CPU, once it's done indexing your workspace.

Does the CPU spike after every keystroke?

If so, I can help you capture a profile.

@newhook
Copy link
Author

newhook commented Nov 8, 2024

Gopls should (eventually) stop consuming CPU, once it's done indexing your workspace.

Yes, but it does not. It stays at 400% CPU all the time, whether or not I'm doing anything. Even after hours of not doing anything.

@adonovan
Copy link
Member

adonovan commented Nov 8, 2024

Could you send the process a SIGABRT after the initial workspace load (a minute after startup should be plenty) and share the stack trace it prints to stderr? That would give us a clue about what loops are active.

@newhook
Copy link
Author

newhook commented Nov 8, 2024

I've run goprof manually and attached cursor to that. Any other flags I should provide to gopls to get more debugging information

$ gopls  --port=9000 -v -rpc.trace=true --debug=localhost:6060

Right now gopls is using very high CPU. Looking at the ps shows me that gopls has forked go mod tidy of the following module file (in a temporary directory).

module matthew

go 1.20

require (
        github.com/bitly/go-simplejson v0.5.1-0.20200416141419-39a59b1b2866 // indirect
        github.com/coreos/go-semver v0.3.0 // indirect
        github.com/coreos/go-systemd/v22 v22.3.2 // indirect
        github.com/customerio/gaia/discovery v0.0.0-20230710120525-c5ab9abfcf8c // indirect
        github.com/customerio/gaia/kmq v0.0.0-20230721153758-a6e29089c100 // indirect
        github.com/customerio/gaia/libraries v0.0.0-20230710120525-c5ab9abfcf8c // indirect
        github.com/customerio/httprouter v1.2.0 // indirect
        github.com/gogo/protobuf v1.3.2 // indirect
        github.com/golang/protobuf v1.5.3 // indirect
        github.com/oklog/ulid v1.3.1 // indirect
        github.com/pelletier/go-toml/v2 v2.0.7 // indirect
        github.com/pkg/errors v0.9.1 // indirect
        github.com/planetscale/vtprotobuf v0.4.0 // indirect
        github.com/tidwall/gjson v1.14.4 // indirect
        github.com/tidwall/match v1.1.1 // indirect
        github.com/tidwall/pretty v1.2.1 // indirect
        github.com/tidwall/sjson v1.2.5 // indirect
        github.com/zeebo/errs v1.2.2 // indirect
        go.etcd.io/etcd/api/v3 v3.5.9 // indirect
        go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
        go.etcd.io/etcd/client/v3 v3.5.9 // indirect
        go.uber.org/atomic v1.9.0 // indirect
        go.uber.org/multierr v1.8.0 // indirect
        go.uber.org/zap v1.24.0 // indirect
        golang.org/x/net v0.9.0 // indirect
        golang.org/x/sync v0.2.0 // indirect
        golang.org/x/sys v0.8.0 // indirect
        golang.org/x/text v0.9.0 // indirect
        google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
        google.golang.org/grpc v1.55.0 // indirect
        google.golang.org/protobuf v1.30.0 // indirect
        storj.io/drpc v0.0.33 // indirect
)

Looking at the stacks:

matthew@Matthew-Newhook ~ % curl 'localhost:6060/debug/pprof/goroutine?debug=1'
goroutine profile: total 28
1 @ 0x1005a903c 0x1005e5d64 0x1008fe064 0x1008fde80 0x1008fb2b8 0x100d79a94 0x100d7a3d4 0x100860618 0x1008621f4 0x100863a2c 0x10085f1e8 0x1005ecca4
#	0x1005e5d63	runtime/pprof.runtime_goroutineProfileWithLabels+0x23	/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/mprof.go:1079
#	0x1008fe063	runtime/pprof.writeRuntimeProfile+0xb3			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/pprof/pprof.go:774
#	0x1008fde7f	runtime/pprof.writeGoroutine+0x4f			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/pprof/pprof.go:734
#	0x1008fb2b7	runtime/pprof.(*Profile).WriteTo+0x147			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/pprof/pprof.go:369
#	0x100d79a93	net/http/pprof.handler.ServeHTTP+0x443			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/pprof/pprof.go:267
#	0x100d7a3d3	net/http/pprof.Index+0xc3				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/pprof/pprof.go:384
#	0x100860617	net/http.HandlerFunc.ServeHTTP+0x37			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:2166
#	0x1008621f3	net/http.(*ServeMux).ServeHTTP+0x1a3			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:2683
#	0x100863a2b	net/http.serverHandler.ServeHTTP+0xbb			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:3137
#	0x10085f1e7	net/http.(*conn).serve+0x507				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:2039

1 @ 0x1005b3108 0x10057d964 0x10057d524 0x100e79a64 0x1008bcfa0 0x1005ecca4
#	0x100e79a63	golang.org/x/tools/gopls/internal/lsprpc.(*streamServer).ServeStream+0x733	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/lsprpc/lsprpc.go:93
#	0x1008bcf9f	golang.org/x/tools/internal/jsonrpc2.Serve.func3+0xef				/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/jsonrpc2/serve.go:126

1 @ 0x1005b3108 0x10057d964 0x10057d544 0x1008ef9a8 0x1005ecca4
#	0x1008ef9a7	golang.org/x/tools/gopls/internal/protocol.LogEvent.func1.1+0x47	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/protocol/context.go:47

1 @ 0x1005b3108 0x1005acb08 0x1005e61a0 0x10062ba08 0x10062cd50 0x10062cd41 0x100635e10 0x100635e05 0x10068efa0 0x100625e4c 0x1006366ec 0x1006366a9 0x100636620 0x100625d98 0x1006985b4 0x100698591 0x100699044 0x1005ecca4
#	0x1005e619f	internal/poll.runtime_pollWait+0x9f		/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/netpoll.go:345
#	0x10062ba07	internal/poll.(*pollDesc).wait+0x27		/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:84
#	0x10062cd4f	internal/poll.(*pollDesc).waitRead+0x1ff	/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:89
#	0x10062cd40	internal/poll.(*FD).Read+0x1f0			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_unix.go:164
#	0x100635e0f	os.(*File).read+0x6f				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:29
#	0x100635e04	os.(*File).Read+0x64				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:118
#	0x10068ef9f	bytes.(*Buffer).ReadFrom+0x8f			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/bytes/buffer.go:211
#	0x100625e4b	io.copyBuffer+0x14b				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:415
#	0x1006366eb	io.Copy+0x5b					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:388
#	0x1006366a8	os.genericWriteTo+0x18				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:269
#	0x10063661f	os.(*File).WriteTo+0x5f				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:247
#	0x100625d97	io.copyBuffer+0x97				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:411
#	0x1006985b3	io.Copy+0x43					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:388
#	0x100698590	os/exec.(*Cmd).writerDescriptor.func1+0x20	/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/exec/exec.go:577
#	0x100699043	os/exec.(*Cmd).Start.func2+0x33			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/exec/exec.go:724

1 @ 0x1005b3108 0x1005acb08 0x1005e61a0 0x10062ba08 0x10062cd50 0x10062cd41 0x100635e10 0x100635e05 0x10068efa0 0x100625e4c 0x1006366ec 0x1006366a9 0x100636620 0x100625d98 0x100aede1c 0x100aeddfd 0x1005ecca4
#	0x1005e619f	internal/poll.runtime_pollWait+0x9f				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/netpoll.go:345
#	0x10062ba07	internal/poll.(*pollDesc).wait+0x27				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:84
#	0x10062cd4f	internal/poll.(*pollDesc).waitRead+0x1ff			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:89
#	0x10062cd40	internal/poll.(*FD).Read+0x1f0					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_unix.go:164
#	0x100635e0f	os.(*File).read+0x6f						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:29
#	0x100635e04	os.(*File).Read+0x64						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:118
#	0x10068ef9f	bytes.(*Buffer).ReadFrom+0x8f					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/bytes/buffer.go:211
#	0x100625e4b	io.copyBuffer+0x14b						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:415
#	0x1006366eb	io.Copy+0x5b							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:388
#	0x1006366a8	os.genericWriteTo+0x18						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:269
#	0x10063661f	os.(*File).WriteTo+0x5f						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:247
#	0x100625d97	io.copyBuffer+0x97						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:411
#	0x100aede1b	io.Copy+0x4b							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/io/io.go:388
#	0x100aeddfc	golang.org/x/tools/internal/gocommand.runCmdContext.func1+0x2c	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:326

1 @ 0x1005b3108 0x1005acb08 0x1005e61a0 0x10062ba08 0x10062cd50 0x10062cd41 0x100759838 0x100765c54 0x1007e02c8 0x1007e0ed0 0x1007e12d4 0x1007e1660 0x1008bd484 0x1008ba588 0x1005ecca4
#	0x1005e619f	internal/poll.runtime_pollWait+0x9f				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/netpoll.go:345
#	0x10062ba07	internal/poll.(*pollDesc).wait+0x27				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:84
#	0x10062cd4f	internal/poll.(*pollDesc).waitRead+0x1ff			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:89
#	0x10062cd40	internal/poll.(*FD).Read+0x1f0					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_unix.go:164
#	0x100759837	net.(*netFD).Read+0x27						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/fd_posix.go:55
#	0x100765c53	net.(*conn).Read+0x33						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/net.go:179
#	0x1007e02c7	bufio.(*Reader).fill+0xf7					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/bufio/bufio.go:110
#	0x1007e0ecf	bufio.(*Reader).ReadSlice+0x2f					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/bufio/bufio.go:376
#	0x1007e12d3	bufio.(*Reader).collectFragments+0x63				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/bufio/bufio.go:451
#	0x1007e165f	bufio.(*Reader).ReadString+0x1f					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/bufio/bufio.go:498
#	0x1008bd483	golang.org/x/tools/internal/jsonrpc2.(*headerStream).Read+0xa3	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/jsonrpc2/stream.go:110
#	0x1008ba587	golang.org/x/tools/internal/jsonrpc2.(*conn).run+0x87		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/jsonrpc2/conn.go:195

1 @ 0x1005b3108 0x1005acb08 0x1005e61a0 0x10062ba08 0x100630490 0x100630481 0x10075b418 0x10076e408 0x10076d67c 0x100863dd8 0x100d884e4 0x100d884e5 0x1005ecca4
#	0x1005e619f	internal/poll.runtime_pollWait+0x9f					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/netpoll.go:345
#	0x10062ba07	internal/poll.(*pollDesc).wait+0x27					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:84
#	0x10063048f	internal/poll.(*pollDesc).waitRead+0x24f				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:89
#	0x100630480	internal/poll.(*FD).Accept+0x240					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_unix.go:611
#	0x10075b417	net.(*netFD).accept+0x27						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/fd_unix.go:172
#	0x10076e407	net.(*TCPListener).accept+0x27						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/tcpsock_posix.go:159
#	0x10076d67b	net.(*TCPListener).Accept+0x2b						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/tcpsock.go:327
#	0x100863dd7	net/http.(*Server).Serve+0x2a7						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:3255
#	0x100d884e3	net/http.Serve+0x983							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:2794
#	0x100d884e4	golang.org/x/tools/gopls/internal/debug.(*Instance).Serve.func1+0x984	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/debug/serve.go:479

1 @ 0x1005b3108 0x1005acb08 0x1005e61a0 0x10062ba08 0x100630490 0x100630481 0x10075b418 0x10076e408 0x10076d67c 0x1008bd260 0x1005ecca4
#	0x1005e619f	internal/poll.runtime_pollWait+0x9f			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/netpoll.go:345
#	0x10062ba07	internal/poll.(*pollDesc).wait+0x27			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:84
#	0x10063048f	internal/poll.(*pollDesc).waitRead+0x24f		/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:89
#	0x100630480	internal/poll.(*FD).Accept+0x240			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_unix.go:611
#	0x10075b417	net.(*netFD).accept+0x27				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/fd_unix.go:172
#	0x10076e407	net.(*TCPListener).accept+0x27				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/tcpsock_posix.go:159
#	0x10076d67b	net.(*TCPListener).Accept+0x2b				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/tcpsock.go:327
#	0x1008bd25f	golang.org/x/tools/internal/jsonrpc2.Serve.func1+0x8f	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/jsonrpc2/serve.go:76

1 @ 0x1005b3108 0x1005c6524 0x1008bca34 0x1008bc644 0x100e90e74 0x1009080c8 0x100e81d74 0x1009080c8 0x100907acc 0x100e9aa50 0x1005b2cac 0x1005ecca4
#	0x1008bca33	golang.org/x/tools/internal/jsonrpc2.Serve+0x233		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/jsonrpc2/serve.go:112
#	0x1008bc643	golang.org/x/tools/internal/jsonrpc2.ListenAndServe+0x123	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/jsonrpc2/serve.go:61
#	0x100e90e73	golang.org/x/tools/gopls/internal/cmd.(*Serve).Run+0x3e3	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cmd/serve.go:134
#	0x1009080c7	golang.org/x/tools/internal/tool.Run+0x4d7			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/tool/tool.go:192
#	0x100e81d73	golang.org/x/tools/gopls/internal/cmd.(*Application).Run+0x103	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cmd/cmd.go:239
#	0x1009080c7	golang.org/x/tools/internal/tool.Run+0x4d7			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/tool/tool.go:192
#	0x100907acb	golang.org/x/tools/internal/tool.Main+0xfb			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/tool/tool.go:93
#	0x100e9aa4f	main.main+0x11f							/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/main.go:35
#	0x1005b2cab	runtime.main+0x28b						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/proc.go:271

1 @ 0x1005b3108 0x1005c6524 0x100aed764 0x100aed1a0 0x100aec238 0x100aebcf8 0x100aeba24 0x100aeb4dc 0x100d2db50 0x100d2d758 0x100c78570 0x100907258 0x100c784c4 0x1005ecca4
#	0x100aed763	golang.org/x/tools/internal/gocommand.runCmdContext+0x403			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:399
#	0x100aed19f	golang.org/x/tools/internal/gocommand.(*Invocation).run+0xd9f			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:289
#	0x100aec237	golang.org/x/tools/internal/gocommand.(*Invocation).runWithFriendlyError+0x37	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:188
#	0x100aebcf7	golang.org/x/tools/internal/gocommand.(*Runner).runConcurrent+0xf7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:125
#	0x100aeba23	golang.org/x/tools/internal/gocommand.(*Runner).RunRaw+0x223			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:99
#	0x100aeb4db	golang.org/x/tools/internal/gocommand.(*Runner).Run+0x20b			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:75
#	0x100d2db4f	golang.org/x/tools/gopls/internal/cache.modTidyImpl+0x36f			/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/mod_tidy.go:121
#	0x100d2d757	golang.org/x/tools/gopls/internal/cache.(*Snapshot).ModTidy.func1+0x47		/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/mod_tidy.go:81
#	0x100c7856f	golang.org/x/tools/internal/memoize.(*Promise).run.func2.1+0x8f			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/memoize/memoize.go:187
#	0x100907257	runtime/trace.WithRegion+0xc7							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/trace/annotation.go:141
#	0x100c784c3	golang.org/x/tools/internal/memoize.(*Promise).run.func2+0x103			/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/memoize/memoize.go:180

1 @ 0x1005b3108 0x1005c6524 0x100c58bec 0x1005ecca4
#	0x100c58beb	golang.org/x/tools/gopls/internal/filecache.gc+0xbb	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/filecache/filecache.go:544

1 @ 0x1005b3108 0x1005c6524 0x100c718ec 0x100c666cc 0x100d24940 0x100d238ec 0x1005ecca4
#	0x100c718eb	golang.org/x/tools/internal/imports.(*ModuleResolver).scan+0x3bb		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/imports/mod.go:648
#	0x100c666cb	golang.org/x/tools/internal/imports.PrimeCache+0x6b				/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/imports/fix.go:748
#	0x100d2493f	golang.org/x/tools/gopls/internal/cache.(*importsState).refreshProcessEnv+0x1bf	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/imports.go:245
#	0x100d238eb	golang.org/x/tools/gopls/internal/cache.(*refreshTimer).schedule.func1+0x11b	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/imports.go:73

1 @ 0x1005b3108 0x1005c6524 0x100c788bc 0x100c78328 0x100c77fec 0x100d2d56c 0x100d2d309 0x100e15fa0 0x100e15c30 0x10069c3f8 0x1005ecca4
#	0x100c788bb	golang.org/x/tools/internal/memoize.(*Promise).wait+0xeb		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/memoize/memoize.go:218
#	0x100c78327	golang.org/x/tools/internal/memoize.(*Promise).run+0x1b7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/memoize/memoize.go:209
#	0x100c77feb	golang.org/x/tools/internal/memoize.(*Promise).Get+0x17b		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/memoize/memoize.go:154
#	0x100d2d56b	golang.org/x/tools/gopls/internal/cache.(*Snapshot).awaitPromise+0x55b	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/snapshot.go:211
#	0x100d2d308	golang.org/x/tools/gopls/internal/cache.(*Snapshot).ModTidy+0x2f8	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/mod_tidy.go:92
#	0x100e15f9f	golang.org/x/tools/gopls/internal/mod.ModTidyDiagnostics+0x5f		/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/mod/diagnostics.go:116
#	0x100e15c2f	golang.org/x/tools/gopls/internal/mod.collectDiagnostics.func1+0x8f	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/mod/diagnostics.go:78
#	0x10069c3f7	golang.org/x/sync/errgroup.(*Group).Go.func1+0x57			/Users/matthew/go/pkg/mod/golang.org/x/sync@v0.8.0/errgroup/errgroup.go:78

1 @ 0x1005b3108 0x1005c6524 0x100d34338 0x1005ecca4
#	0x100d34337	golang.org/x/tools/gopls/internal/cache.(*parseCache).gc+0xa7	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/cache/parse_cache.go:262

1 @ 0x1005b3108 0x1005c7368 0x1005c7345 0x1005e7d8c 0x1005f9904 0x10069c28c 0x100e15b34 0x100e1561c 0x100e604c0 0x1005ecca4
#	0x1005e7d8b	sync.runtime_Semacquire+0x2b						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sema.go:62
#	0x1005f9903	sync.(*WaitGroup).Wait+0x73						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/sync/waitgroup.go:116
#	0x10069c28b	golang.org/x/sync/errgroup.(*Group).Wait+0x2b				/Users/matthew/go/pkg/mod/golang.org/x/sync@v0.8.0/errgroup/errgroup.go:56
#	0x100e15b33	golang.org/x/tools/gopls/internal/mod.collectDiagnostics+0x2c3		/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/mod/diagnostics.go:91
#	0x100e1561b	golang.org/x/tools/gopls/internal/mod.TidyDiagnostics+0x7b		/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/mod/diagnostics.go:42
#	0x100e604bf	golang.org/x/tools/gopls/internal/server.(*server).diagnose.func3+0x5f	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/server/diagnostics.go:426

1 @ 0x1005b3108 0x1005c7368 0x1005c7345 0x1005e7d8c 0x1005f9904 0x100e5f994 0x100e5e8d4 0x100e66a24 0x1005ecca4
#	0x1005e7d8b	sync.runtime_Semacquire+0x2b							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sema.go:62
#	0x1005f9903	sync.(*WaitGroup).Wait+0x73							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/sync/waitgroup.go:116
#	0x100e5f993	golang.org/x/tools/gopls/internal/server.(*server).diagnose+0xa33		/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/server/diagnostics.go:519
#	0x100e5e8d3	golang.org/x/tools/gopls/internal/server.(*server).diagnoseSnapshot+0x223	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/server/diagnostics.go:231
#	0x100e66a23	golang.org/x/tools/gopls/internal/server.(*server).addFolders.func3+0x53	/Users/matthew/go/pkg/mod/golang.org/x/tools/gopls@v0.16.2/internal/server/general.go:338

1 @ 0x1005e8b98 0x100601280 0x100638e5c 0x100638de5 0x100636b60 0x100c6207c 0x100c62065 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x10060127f	syscall.Open+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1162
#	0x100638e5b	os.open+0xdb								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_open_unix.go:15
#	0x100638de4	os.openFileNolog+0x64							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:272
#	0x100636b5f	os.OpenFile+0x3f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:374
#	0x100c6207b	os.Open+0x57b								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:354
#	0x100c62064	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x564		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:287
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x100601280 0x100638e5c 0x100638de5 0x100636b60 0x100c6207c 0x100c62065 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x10060127f	syscall.Open+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1162
#	0x100638e5b	os.open+0xdb								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_open_unix.go:15
#	0x100638de4	os.openFileNolog+0x64							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:272
#	0x100636b5f	os.OpenFile+0x3f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:374
#	0x100c6207b	os.Open+0x57b								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:354
#	0x100c62064	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x564		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:287
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x100601280 0x100638e5c 0x100638de5 0x100636b60 0x100c6207c 0x100c62065 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x10060127f	syscall.Open+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1162
#	0x100638e5b	os.open+0xdb								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_open_unix.go:15
#	0x100638de4	os.openFileNolog+0x64							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:272
#	0x100636b5f	os.OpenFile+0x3f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:374
#	0x100c6207b	os.Open+0x57b								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:354
#	0x100c62064	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x564		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:287
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x100601280 0x100638e5c 0x100638de5 0x100636b60 0x100c6207c 0x100c62065 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x10060127f	syscall.Open+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1162
#	0x100638e5b	os.open+0xdb								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_open_unix.go:15
#	0x100638de4	os.openFileNolog+0x64							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:272
#	0x100636b5f	os.OpenFile+0x3f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:374
#	0x100c6207b	os.Open+0x57b								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:354
#	0x100c62064	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x564		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:287
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x100602778 0x100638cd4 0x100638cc5 0x100638bc1 0x100638f50 0x100636b60 0x100c6207c 0x100c62065 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0
#	0x1005e8b97	syscall.syscall+0x57						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x100602777	syscall.Fstat+0x37						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1897
#	0x100638cd3	os.newFile.func1+0x223						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:188
#	0x100638cc4	os.ignoringEINTR+0x214						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:251
#	0x100638bc0	os.newFile+0x110						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:187
#	0x100638f4f	os.openFileNolog+0x1cf						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_unix.go:301
#	0x100636b5f	os.OpenFile+0x3f						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:374
#	0x100c6207b	os.Open+0x57b							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file.go:354
#	0x100c62064	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x564	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:287
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334

1 @ 0x1005e8b98 0x1006029f0 0x10063b460 0x10063b451 0x10063b441 0x10063afa0 0x100c61ba8 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x1006029ef	syscall.Stat+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1963
#	0x10063b45f	os.statNolog.func1+0x4f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:32
#	0x10063b450	os.ignoringEINTR+0x40							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:251
#	0x10063b440	os.statNolog+0x30							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:31
#	0x10063af9f	os.Stat+0x2f								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat.go:13
#	0x100c61ba7	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0xa7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:224
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x1006029f0 0x10063b460 0x10063b451 0x10063b441 0x10063afa0 0x100c61ba8 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x1006029ef	syscall.Stat+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1963
#	0x10063b45f	os.statNolog.func1+0x4f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:32
#	0x10063b450	os.ignoringEINTR+0x40							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:251
#	0x10063b440	os.statNolog+0x30							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:31
#	0x10063af9f	os.Stat+0x2f								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat.go:13
#	0x100c61ba7	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0xa7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:224
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x1006029f0 0x10063b460 0x10063b451 0x10063b441 0x10063afa0 0x100c61ba8 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x1006029ef	syscall.Stat+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1963
#	0x10063b45f	os.statNolog.func1+0x4f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:32
#	0x10063b450	os.ignoringEINTR+0x40							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:251
#	0x10063b440	os.statNolog+0x30							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:31
#	0x10063af9f	os.Stat+0x2f								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat.go:13
#	0x100c61ba7	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0xa7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:224
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x1006029f0 0x10063b460 0x10063b451 0x10063b441 0x10063afa0 0x100c61ba8 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x1006029ef	syscall.Stat+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1963
#	0x10063b45f	os.statNolog.func1+0x4f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:32
#	0x10063b450	os.ignoringEINTR+0x40							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:251
#	0x10063b440	os.statNolog+0x30							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:31
#	0x10063af9f	os.Stat+0x2f								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat.go:13
#	0x100c61ba7	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0xa7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:224
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8b98 0x1006029f0 0x10063b460 0x10063b451 0x10063b441 0x10063afa0 0x100c61ba8 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c622c0 0x100c62414 0x1005ecca4
#	0x1005e8b97	syscall.syscall+0x57							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:23
#	0x1006029ef	syscall.Stat+0x6f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:1963
#	0x10063b45f	os.statNolog.func1+0x4f							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:32
#	0x10063b450	os.ignoringEINTR+0x40							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/file_posix.go:251
#	0x10063b440	os.statNolog+0x30							/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat_unix.go:31
#	0x10063af9f	os.Stat+0x2f								/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/stat.go:13
#	0x100c61ba7	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0xa7		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:224
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c622bf	golang.org/x/tools/internal/gopathwalk.(*walker).walk+0x7bf		/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:334
#	0x100c62413	golang.org/x/tools/internal/gopathwalk.(*walker).walk.func1+0x63	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gopathwalk/walk.go:325

1 @ 0x1005e8cc8 0x1005ff16c 0x1005fc2b8 0x100635890 0x100699628 0x10069961d 0x100aedb78 0x1005ecca4
#	0x1005e8cc7	syscall.syscall6+0x67						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/runtime/sys_darwin.go:45
#	0x1005ff16b	syscall.wait4+0x4b						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/zsyscall_darwin_arm64.go:44
#	0x1005fc2b7	syscall.Wait4+0x27						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/syscall/syscall_bsd.go:144
#	0x10063588f	os.(*Process).wait+0x7f						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/exec_unix.go:43
#	0x100699627	os.(*Process).Wait+0x37						/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/exec.go:134
#	0x10069961c	os/exec.(*Cmd).Wait+0x2c					/Users/matthew/.local/share/mise/installs/go/1.22.3/src/os/exec/exec.go:897
#	0x100aedb77	golang.org/x/tools/internal/gocommand.runCmdContext.func4+0x27	/Users/matthew/go/pkg/mod/golang.org/x/tools@v0.22.1-0.20240829175637-39126e24d653/internal/gocommand/invoke.go:382

1 @ 0x10062b9c4 0x10062cc20 0x10062cc0d 0x100759838 0x100765c54 0x100859810 0x1005ecca4
#	0x10062b9c3	internal/poll.(*pollDesc).prepare+0x123		/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:64
#	0x10062cc1f	internal/poll.(*pollDesc).prepareRead+0xcf	/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_poll_runtime.go:73
#	0x10062cc0c	internal/poll.(*FD).Read+0xbc			/Users/matthew/.local/share/mise/installs/go/1.22.3/src/internal/poll/fd_unix.go:153
#	0x100759837	net.(*netFD).Read+0x27				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/fd_posix.go:55
#	0x100765c53	net.(*conn).Read+0x33				/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/net.go:179
#	0x10085980f	net/http.(*connReader).backgroundRead+0x3f	/Users/matthew/.local/share/mise/installs/go/1.22.3/src/net/http/server.go:681

@adonovan
Copy link
Member

adonovan commented Nov 8, 2024

Thanks! A lot of threads are walking your GOMODCACHE, which appears to be quite large. You might want to try go clean -modcache as a one-off measure and see if that improves things. As luck would have it, @pjweinb is working on a new implementation of the module cache index at this very moment. When it lands in gopls it should improve things considerably.

@adonovan
Copy link
Member

adonovan commented Nov 8, 2024

P.S. It is surprising that there are so many frames on the WalkDir stack--more than 18 in some threads. This means some modules contain very deep directory hierarchies. You might be able to find out which module is the culprit by running a command to display the file names provided to the system calls. On linux you can use strace -p PID -e trace=file. Your machine looks like a mac, in which case you could try the less targeted sudo fs_usage.

@newhook
Copy link
Author

newhook commented Nov 8, 2024

Thanks for the help so far! I did have a very large gomodcache, so I cleaned that, but it didn't seem to fix the problem. Running sudo fs_usage | grep gopls | grep open shows gopls seemingly opening everything under the sun.

For example. Why would gopls be traversing my entire filesystem?

09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000157   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000207   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000170   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000228   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000211   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000202   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000041   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000044   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000051   gopls
09:41:52  open              Volumes/Data/Users/matthew/OrbStack/docker/containers/stack-temporal-ui-1/lib    0.000051   gopls

I tried again a couple of minutes later:

09:44:05  open              clude/node/openssl/archs/linux64-s390x/asm_avx2/providers/common/include/prov    0.000041   gopls
09:44:05  open              RaycastNodeExtensions_RaycastNodeExtensions.bundle/Contents/Resources/api-dev    0.000032   gopls
09:44:05  open              RaycastNodeExtensions_RaycastNodeExtensions.bundle/Contents/Resources/api-dev    0.000027   gopls
09:44:05  open              Data/Applications/Raycast.app/Contents/Resources/RaycastWeb_RaycastWeb.bundle    0.000035   gopls
09:44:05  open              m/Volumes/Data/Applications/Pages.app/Contents/Resources/Frames/Baby.sfrframe    0.000026   gopls
09:44:05  open              /Applications/Pages.app/Contents/Resources/Frames/Hardcover Burgundy.sfrframe    0.000172   gopls
09:44:05  open              Data/Applications/Raycast.app/Contents/Resources/RaycastWeb_RaycastWeb.bundle    0.000119   gopls
09:44:05  open              y/Caches/node-gyp/22.2.0/include/node/openssl/archs/linux64-s390x/asm/include    0.000039   gopls
09:44:05  open              Data/Applications/Raycast.app/Contents/Resources/RaycastWeb_RaycastWeb.bundle    0.000082   gopls
09:44:05  open              Data/Applications/Raycast.app/Contents/Resources/RaycastWeb_RaycastWeb.bundle    0.000100   gopls
09:44:05  open              s/node-gyp/22.2.0/include/node/openssl/archs/linux64-s390x/asm/include/crypto    0.000030   gopls
09:44:05  open              ications/Raycast.app/Contents/Resources/RaycastWeb_RaycastWeb.bundle/Contents    0.000026   gopls
09:44:05  open              /Data/Applications/Pages.app/Contents/Resources/Frames/Baby.sfrframe/Contents    0.000122   gopls
09:44:05  open              w/Library/Caches/node-gyp/22.2.0/include/node/openssl/archs/linux64-s390x/asm    0.000027   gopls

@adonovan
Copy link
Member

adonovan commented Nov 8, 2024

Thanks for the data, this is very helpfui.

Why would gopls be traversing my entire filesystem?

No good reason: this is definitely a bug. Seems like the module resolver has escaped the mod cache.

What set of .go files do you have open? I wonder if somehow one of them is in the root of a very deep tree (e.g. "/a.go").

I notice that gopathwalk.Walk claims to follows symbolic links (!!):

// Unlike filepath.WalkDir, Walk follows symbolic links
// (while guarding against cycles).
func Walk(roots []Root, add func(root Root, dir string), opts Options) {

so if any of your source or module directories contains a link to, say /, this could spell trouble

@findleyr will certainly have more ideas.

@newhook
Copy link
Author

newhook commented Nov 8, 2024

In this case I don't have any go files open in cursor (I closed them all to see whether that was causing the problem). Let me check for symlinks!

matthew@Matthew-Newhook mod % pwd
/Users/matthew/go/pkg/mod
matthew@Matthew-Newhook mod % find . -type l

and also none in the source code repo either.

@findleyr
Copy link
Member

Can you share any gopls settings that you are using?

Gopls used to scan the file system in many places, but a while ago I cleaned (most) of these up. Now the only two places I'm aware of where gopls will walk the filesystem is (1) module cache scanning and (2) looking for template files, which only occurs if you have "templateExtensions" set.

@newhook
Copy link
Author

newhook commented Nov 11, 2024

I don't think I'm using any gopls specific settings.

@findleyr
Copy link
Member

Ok, well this certainly looks like a runaway modcache scan.

Can you start gopls with -logfile=/tmp/gopls.log and share the log message with "Created View". That will tell us what gopls determines as your workspace and GOMODCACHE. It may contain clues.

I would also like to send you a patch that completely disables the module cache scan. If that fixes the problem, we can be certain of the cause.

@findleyr
Copy link
Member

Moving this to v0.18.0, as my hope is that we will rewrite the entire goimports scanning logic for that release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
gopls/imports gopls Issues related to the Go language server, gopls. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. 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