typescript-go icon indicating copy to clipboard operation
typescript-go copied to clipboard

crash on initial load of a large react-native/expo project

Open OneOfOne opened this issue 3 weeks ago • 2 comments

Stack trace

[ERROR][2025-12-03 18:23:38] /usr/share/nvim/runtime/lua/vim/lsp/log.lua:151	"rpc"	"tsgo"	"stderr"	"panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]\n[signal SIGSEGV: segmentation violation code=0x1"
[ERROR][2025-12-03 18:23:38] /usr/share/nvim/runtime/lua/vim/lsp/log.lua:151	"rpc"	"tsgo"	"stderr"	" addr=0x30 pc=0xa92496]\n\ngoroutine 12645 [running]:\ngithub.com/microsoft/typescript-go/internal/project.(*Snapshot).Clone.func1()\n\tgithub.com/microsoft/typescript-go/internal/project/snapshot.go:201 +0x7d\npanic({0xbdb980?, 0x16c3b70?})\n\truntime/panic.go"
[ERROR][2025-12-03 18:23:38] /usr/share/nvim/runtime/lua/vim/lsp/log.lua:151	"rpc"	"tsgo"	"stderr"	":783 +0x132\nsync/atomic.(*Int32).Add(...)\n\tsync/atomic/type.go:94\nsync.(*RWMutex).RLock(...)\n\tsync/rwmutex.go:72\ngithub.com/microsoft/typescript-go/internal/project.(*WatchedFiles[...]).Clone(0xc00739e4c0, {{0xc0161df710?, 0xc0039df590?, 0xc000032ba0?}, 0x0?})\n\tgithub.com/microsoft/typescript-go/internal/project/watch.go:121 +0x56\ngithub.com/microsoft/typescript-go/internal/project.(*ProjectCollectionBuilder).DidUpdateATAState.(*ProjectCollectionBuilder).DidUpdateATAState.func1.func3(0xc00e507260)\n\tgithub.com/microsoft/typescript-go/internal/project/projectcollectionbuilder.go:521 +0x11b"
[ERROR][2025-12-03 18:23:38] /usr/share/nvim/runtime/lua/vim/lsp/log.lua:151	"rpc"	"tsgo"	"stderr"	"\ngithub.com/microsoft/typescript-go/internal/project/dirty.(*Box[...]).Change(0xc0012adf80?, 0xc0039df668?)\n\tgithub.com/microsoft/typescript-go/internal/project/dirty/box.go:41 +0x6b\ngithub.com/microsoft/typescript-go/internal/project/dirty.(*Box[...]).ChangeIf(0x1085220, 0xc0039df6b0, 0xc0039df668?)\n\tgithub.com/microsoft/typescript-go/internal/project/dirty/box.go:46 +0x45\ngithub.com/microsoft/typescript-go/internal/project.(*ProjectCollectionBuilder).DidUpdateATAState.func1(...)\n\tgithub.com/microsoft/typescript-go/internal/project/projectcollectionbuilder.go:499\ngithub.com/microsoft/typescript-go/internal/project.(*ProjectCollectionBuilder).DidUpdateATAState(0xc0059db800, 0xddd6e9?, 0xc00e52c370)\n\tgithub.com/microsoft/typescript-go/internal/project/projectcollectionbuilder.go:531 +0x1b2\ngithub.com/microsoft/typescript-go/internal/project.(*Snapshot).Clone(0xc00b8a7b00, {0x1079b28, 0xc0161b39b0}, {{{0xc0161df530, 0x1, 0x1}, {0x0, 0x0, 0x0}, 0x0}, ...}, ...)\n\tgithub.com/microsoft/typescript-go/internal/project/snapshot.go:283 +0x9a5\ngithub.com/microsoft/typescript-go/internal/project.(*Session).UpdateSnapshot(0xc000298c60, {0x1079b28, 0xc0161b39b0}, 0xc013ff8f60"
[ERROR][2025-12-03 18:23:38] /usr/share/nvim/runtime/lua/vim/lsp/log.lua:151	"rpc"	"tsgo"	"stderr"	", {{{0xc0161df530, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...})\n\tgithub.com/microsoft/typescript-go/internal/project/session.go:520 +0xb3\ngithub.com/microsoft/typescript-go/internal/project.(*Session).getSnapshot(0xc000298c60, {0x1079b28, 0xc0161b39b0}, {{0xc0161df530, 0x1, 0x1}, {0x0, 0x0, 0x0}, 0x0})\n\tgithub.com/microsoft/typescript-go/internal/project/session.go:398 +0x37a\ngithub.com/microsoft/typescript-go/internal/project.(*Session).getSnapshotAndDefaultProject(0xc000298c60, {0x1079b28, 0xc0161b39b0}, {0xc0098959f0, 0x43})\n\tgithub.com/microsoft/typescript-go/internal/project/session.go:448 +0x10b\ngithub.com/microsoft/typescript-go/internal/project.(*Session).GetLanguageService(0x4776c5?, {0x1079b28?, 0xc0161b39b0?}, {0xc0098959f0?, 0x0?})\n\tgithub.com/microsoft/typescript-go/internal/project/session.go:460 +0x25\ngithub.com/microsoft/typescript-go/internal/lsp.init.func1.registerLanguageServiceDocumentRequestHandler[...].23({0x1079b28, 0xc0161b39b0}, 0xc00860fb00)\n\tgithub.com/microsoft/typescript-go/internal/lsp/server.go:614 +0xb6\ngithub.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification(0xc0001e6008, {0x1079b60?, 0xc00e52c2d0?}, 0xc00860fb00)\n\tgithub.com/microsoft/typescript-go/internal/lsp/server.go:500 +0x153\ngithub.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()\n\tgithub.com/microsoft/typescript-go/internal/lsp/server.go:403 +0x3a\ncreated by github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop in goroutine 11\n\tgithub.com/microsoft/typescript-go/internal/lsp/server.go:423 +0x9ad\n"

Steps to reproduce

  1. Add tsgo to lspconfig
  2. install latest @typescript/[email protected]
  3. open the project in nvim

OneOfOne avatar Dec 04 '25 00:12 OneOfOne

Better formatted:

panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0xa92496]

goroutine 12645 [running]:
github.com/microsoft/typescript-go/internal/project.(*Snapshot).Clone.func1()
	github.com/microsoft/typescript-go/internal/project/snapshot.go:201 +0x7d
panic({0xbdb980?, 0x16c3b70?})
	runtime/panic.go:783 +0x132
sync/atomic.(*Int32).Add(...)
	sync/atomic/type.go:94
sync.(*RWMutex).RLock(...)
	sync/rwmutex.go:72
github.com/microsoft/typescript-go/internal/project.(*WatchedFiles[...]).Clone(0xc00739e4c0, {{0xc0161df710?, 0xc0039df590?, 0xc000032ba0?}, 0x0?})
	github.com/microsoft/typescript-go/internal/project/watch.go:121 +0x56
github.com/microsoft/typescript-go/internal/project.(*ProjectCollectionBuilder).DidUpdateATAState.(*ProjectCollectionBuilder).DidUpdateATAState.func1.func3(0xc00e507260)
	github.com/microsoft/typescript-go/internal/project/projectcollectionbuilder.go:521 +0x11b
github.com/microsoft/typescript-go/internal/project/dirty.(*Box[...]).Change(0xc0012adf80?, 0xc0039df668?)
	github.com/microsoft/typescript-go/internal/project/dirty/box.go:41 +0x6b
github.com/microsoft/typescript-go/internal/project/dirty.(*Box[...]).ChangeIf(0x1085220, 0xc0039df6b0, 0xc0039df668?)
	github.com/microsoft/typescript-go/internal/project/dirty/box.go:46 +0x45
github.com/microsoft/typescript-go/internal/project.(*ProjectCollectionBuilder).DidUpdateATAState.func1(...)
	github.com/microsoft/typescript-go/internal/project/projectcollectionbuilder.go:499
github.com/microsoft/typescript-go/internal/project.(*ProjectCollectionBuilder).DidUpdateATAState(0xc0059db800, 0xddd6e9?, 0xc00e52c370)
	github.com/microsoft/typescript-go/internal/project/projectcollectionbuilder.go:531 +0x1b2
github.com/microsoft/typescript-go/internal/project.(*Snapshot).Clone(0xc00b8a7b00, {0x1079b28, 0xc0161b39b0}, {{{0xc0161df530, 0x1, 0x1}, {0x0, 0x0, 0x0}, 0x0}, ...}, ...)
	github.com/microsoft/typescript-go/internal/project/snapshot.go:283 +0x9a5
github.com/microsoft/typescript-go/internal/project.(*Session).UpdateSnapshot(0xc000298c60, {0x1079b28, 0xc0161b39b0}, 0xc013ff8f60, {{{0xc0161df530, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...})
	github.com/microsoft/typescript-go/internal/project/session.go:520 +0xb3
github.com/microsoft/typescript-go/internal/project.(*Session).getSnapshot(0xc000298c60, {0x1079b28, 0xc0161b39b0}, {{0xc0161df530, 0x1, 0x1}, {0x0, 0x0, 0x0}, 0x0})
	github.com/microsoft/typescript-go/internal/project/session.go:398 +0x37a
github.com/microsoft/typescript-go/internal/project.(*Session).getSnapshotAndDefaultProject(0xc000298c60, {0x1079b28, 0xc0161b39b0}, {0xc0098959f0, 0x43})
	github.com/microsoft/typescript-go/internal/project/session.go:448 +0x10b
github.com/microsoft/typescript-go/internal/project.(*Session).GetLanguageService(0x4776c5?, {0x1079b28?, 0xc0161b39b0?}, {0xc0098959f0?, 0x0?})
	github.com/microsoft/typescript-go/internal/project/session.go:460 +0x25
github.com/microsoft/typescript-go/internal/lsp.init.func1.registerLanguageServiceDocumentRequestHandler[...].23({0x1079b28, 0xc0161b39b0}, 0xc00860fb00)
	github.com/microsoft/typescript-go/internal/lsp/server.go:614 +0xb6
github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification(0xc0001e6008, {0x1079b60?, 0xc00e52c2d0?}, 0xc00860fb00)
	github.com/microsoft/typescript-go/internal/lsp/server.go:500 +0x153
github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
	github.com/microsoft/typescript-go/internal/lsp/server.go:403 +0x3a
created by github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop in goroutine 11
	github.com/microsoft/typescript-go/internal/lsp/server.go:423 +0x9ad

jakebailey avatar Dec 04 '25 02:12 jakebailey

In this:

			func(p *Project) {
				// We checked before triggering this change (in Session.triggerATAForUpdatedProjects) that
				// the set of typings files is actually different.
				p.installedTypingsInfo = ataChange.TypingsInfo
				p.typingsFiles = ataChange.TypingsFiles
				typingsWatchGlobs := getTypingsLocationsGlobs(
					ataChange.TypingsFilesToWatch,
					b.sessionOptions.TypingsLocation,
					b.sessionOptions.CurrentDirectory,
					p.currentDirectory,
					b.fs.fs.UseCaseSensitiveFileNames(),
				)
				p.typingsWatch = p.typingsWatch.Clone(typingsWatchGlobs)

p.typingsWatch must be nil.

jakebailey avatar Dec 04 '25 02:12 jakebailey