Skip to content

Crash when code contains disposer logic. Request textDocument/inlayHint failed. #2241

@jinliming2

Description

@jinliming2

Stack trace

panic handling request textDocument/inlayHint Debug failure. Unexpected node.
Node KindPropertyAccessExpression was unexpected. goroutine 17755 [running]:
runtime/debug.Stack()
	runtime/debug/stack.go:26 +0x5e
github.com/microsoft/typescript-go/internal/lsp.(*Server).recover(0xc000166008, 0xc00efb4c30)
	github.com/microsoft/typescript-go/internal/lsp/server.go:880 +0x58
panic({0xba2920?, 0xc00d5e7450?})
	runtime/panic.go:783 +0x132
github.com/microsoft/typescript-go/internal/debug.Fail(...)
	github.com/microsoft/typescript-go/internal/debug/shared.go:14
github.com/microsoft/typescript-go/internal/debug.FailBadSyntaxKind({0x1079020?, 0xc00d9aa0b0?}, {0x0?, 0xc00efb57a0?, 0xbf5d60?})
	github.com/microsoft/typescript-go/internal/debug/shared.go:24 +0xf4
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc00d9aa0b0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:724 +0x3487
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc009fd6fc0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:721 +0x2b2e
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc00817b8c0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:658 +0x36e9
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func2({0xc018f24540, 0x1, 0xc0004f57a6?}, {0xdd7e1e, 0x2})
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:733 +0x50
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc005919320)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:518 +0x4f27
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts(0xa37e5d?, 0xc0298cb680?)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:748 +0xc5
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).typeToInlayHintParts(0xc00e3e8d20, 0xc00e6d92b0?)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:316 +0x4a
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visitVariableLikeDeclaration(0xc00e3e8d20, 0xc00e6d92b0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:236 +0x145
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc00e6d92b0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:86 +0x177
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*VariableDeclarationList).ForEachChild(0xc00d5e6850?, 0xc00d5e6860)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3826 +0x67
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc02977e700)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*VariableStatement).ForEachChild(0xc00d5e6840?, 0xc00049fb20?)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3722 +0x62
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc028ee4f00)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*Block).ForEachChild(0x7f97131e4b40?, 0xc00d5e6840)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3679 +0x67
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc0199bad20)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*ArrowFunction).ForEachChild(0xc028ee4fa0, 0xc00d5e6800)
	github.com/microsoft/typescript-go/internal/ast/ast.go:6461 +0x152
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc028ee4fa0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*VariableDeclaration).ForEachChild(0xc00e6d9318, 0xc00d5e6740)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3776 +0xc2
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc00e6d9318)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*VariableDeclarationList).ForEachChild(0xc00d5e6680?, 0xc00d5e66a0)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3826 +0x67
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc02977e740)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*VariableStatement).ForEachChild(0xc00d5e6660?, 0xc0058a8d58?)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3722 +0x62
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc028ee4f50)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*SourceFile).ForEachChild(0xc01bd6a008, 0xc00d5e6660)
	github.com/microsoft/typescript-go/internal/ast/ast.go:10862 +0x9b
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00e3e8d20, 0xc01bd6a008)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ls.(*LanguageService).ProvideInlayHint(0xc00efb5080, {0x107cdc8, 0xc00efb4db0}, 0xc00efb4b70)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:48 +0x2e5
github.com/microsoft/typescript-go/internal/lsp.(*Server).handleInlayHint(0x4776c5?, {0x107cdc8?, 0xc00efb4db0?}, 0xc0114ccc90?, 0xc0001856b8?)
	github.com/microsoft/typescript-go/internal/lsp/server.go:1341 +0x25
github.com/microsoft/typescript-go/internal/lsp.init.func1.registerLanguageServiceDocumentRequestHandler[...].25({0x107cdc8, 0xc00efb4db0}, 0xc00efb4c30)
	github.com/microsoft/typescript-go/internal/lsp/server.go:629 +0x11a
github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification(0xc000166008, {0x107ce00?, 0xc01f524460?}, 0xc00efb4c30)
	github.com/microsoft/typescript-go/internal/lsp/server.go:510 +0x153
github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
	github.com/microsoft/typescript-go/internal/lsp/server.go:413 +0x3a
created by github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop in goroutine 25
	github.com/microsoft/typescript-go/internal/lsp/server.go:433 +0x9ad

[Error - 1:42:36 PM] Request textDocument/inlayHint failed.
  Message: InternalError: panic handling request textDocument/inlayHint: Debug failure. Unexpected node.
Node KindPropertyAccessExpression was unexpected.
  Code: -32603 
panic handling request textDocument/inlayHint Debug failure. Unexpected node.
Node KindPropertyAccessExpression was unexpected. goroutine 18328 [running]:
runtime/debug.Stack()
	runtime/debug/stack.go:26 +0x5e
github.com/microsoft/typescript-go/internal/lsp.(*Server).recover(0xc000166008, 0xc00d27d620)
	github.com/microsoft/typescript-go/internal/lsp/server.go:880 +0x58
panic({0xba2920?, 0xc028090830?})
	runtime/panic.go:783 +0x132
github.com/microsoft/typescript-go/internal/debug.Fail(...)
	github.com/microsoft/typescript-go/internal/debug/shared.go:14
github.com/microsoft/typescript-go/internal/debug.FailBadSyntaxKind({0x1079020?, 0xc0077ea000?}, {0x0?, 0x7f9712e10a60?, 0xbf5d0a?})
	github.com/microsoft/typescript-go/internal/debug/shared.go:24 +0xf4
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc0077ea000)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:724 +0x3487
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc00a2f4c40)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:721 +0x2b2e
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc008377320)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:658 +0x36e9
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func2({0xc01e1ae608, 0x1, 0xc0000a17a6?}, {0xdd7e1e, 0x2})
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:733 +0x50
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts.func1(0xc028eeefc0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:518 +0x4f27
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).getInlayHintLabelParts(0xa37e5d?, 0xc0298cb680?)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:748 +0xc5
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).typeToInlayHintParts(0xc00dd70240, 0xc00e6d92b0?)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:316 +0x4a
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visitVariableLikeDeclaration(0xc00dd70240, 0xc00e6d92b0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:236 +0x145
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc00e6d92b0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:86 +0x177
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*VariableDeclarationList).ForEachChild(0xc0280906b0?, 0xc0280906c0)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3826 +0x67
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc02977e700)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*VariableStatement).ForEachChild(0xc0280906a0?, 0xc0298c1b20?)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3722 +0x62
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc028ee4f00)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*Block).ForEachChild(0x7f97123a9480?, 0xc0280906a0)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3679 +0x67
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc0199bad20)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*ArrowFunction).ForEachChild(0xc028ee4fa0, 0xc028090680)
	github.com/microsoft/typescript-go/internal/ast/ast.go:6461 +0x152
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc028ee4fa0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*VariableDeclaration).ForEachChild(0xc00e6d9318, 0xc028090600)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3776 +0xc2
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc00e6d9318)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*VariableDeclarationList).ForEachChild(0xc028090590?, 0xc0280905a0)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3826 +0x67
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc02977e740)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visit(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:21
github.com/microsoft/typescript-go/internal/ast.(*VariableStatement).ForEachChild(0xc028090580?, 0xc005617d58?)
	github.com/microsoft/typescript-go/internal/ast/ast.go:3722 +0x62
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc028ee4f50)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ast.visitNodes(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:28
github.com/microsoft/typescript-go/internal/ast.visitNodeList(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:37
github.com/microsoft/typescript-go/internal/ast.(*SourceFile).ForEachChild(0xc01bd6a008, 0xc028090580)
	github.com/microsoft/typescript-go/internal/ast/ast.go:10862 +0x9b
github.com/microsoft/typescript-go/internal/ast.(*Node).ForEachChild(...)
	github.com/microsoft/typescript-go/internal/ast/ast.go:242
github.com/microsoft/typescript-go/internal/ls.(*inlayHintState).visit(0xc00dd70240, 0xc01bd6a008)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:104 +0x314
github.com/microsoft/typescript-go/internal/ls.(*LanguageService).ProvideInlayHint(0xc00d2c1110, {0x107cdc8, 0xc00d2c10b0}, 0xc00d27d5f0)
	github.com/microsoft/typescript-go/internal/ls/inlay_hints.go:48 +0x2e5
github.com/microsoft/typescript-go/internal/lsp.(*Server).handleInlayHint(0x4776c5?, {0x107cdc8?, 0xc00d2c10b0?}, 0xc0114ccc90?, 0x0?)
	github.com/microsoft/typescript-go/internal/lsp/server.go:1341 +0x25
github.com/microsoft/typescript-go/internal/lsp.init.func1.registerLanguageServiceDocumentRequestHandler[...].25({0x107cdc8, 0xc00d2c10b0}, 0xc00d27d620)
	github.com/microsoft/typescript-go/internal/lsp/server.go:629 +0x11a
github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification(0xc000166008, {0x107ce00?, 0xc004d28be0?}, 0xc00d27d620)
	github.com/microsoft/typescript-go/internal/lsp/server.go:510 +0x153
github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
	github.com/microsoft/typescript-go/internal/lsp/server.go:413 +0x3a
created by github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop in goroutine 25
	github.com/microsoft/typescript-go/internal/lsp/server.go:433 +0x9ad

[Error - 1:42:36 PM] Request textDocument/inlayHint failed.
  Message: InternalError: panic handling request textDocument/inlayHint: Debug failure. Unexpected node.
Node KindPropertyAccessExpression was unexpected.
  Code: -32603 

Steps to reproduce

Just open a TypeScript file containing disposer logic. Minimal Reproduction Code:

const func = () => {
  using _defer = {
    [Symbol.dispose]() {},
  };
};

Or

const func = async () => {
  await using _defer = {
    async [Symbol.asyncDispose]() {},
  };
};

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions