microsoft / microsoft/TypeScript

Crash: optional chain + tagged template panics the optional-chain transform

Abierto
#63,965 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

🔎 Search Terms

flattenChain tagged template, KindTaggedTemplateExpression, "Unhandled case in Node.Expression", "isOptionalChain", optional chain tagged template crash, e?.``(

🕗 Version & Regression Information
  • This is a crash
  • This is the behavior in every version I tried: TypeScript 6.0.3 (JS) and 7.1.0-dev (main, Go)
  • I have reviewed the FAQ for entries about optional chaining and tagged templates. Those entries do not cover this compiler crash.
⏯ Playground Link

Not useful here. The crash needs ES2020 optional-chain emit. Use the CLI command below.

💻 Code
e?.``(
🙁 Actual behavior
panic: Unhandled case in Node.Expression: KindTaggedTemplateExpression [recovered, repanicked]

goroutine 13 [running]:
sync.(*WaitGroup).Go.func1.1()
        sync/waitgroup.go:251 +0x48
panic({0x10417d8e0?, 0x2b3e77a92750?})
        runtime/panic.go:860 +0x12c
github.com/microsoft/TypeScript/tsc/internal/ast.(*Node).Expression(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/ast.go:383 +0x718
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.flattenChain(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:143 +0x1c4
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*optionalChainTransformer).visitOptionalExpression(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:151 +0x38
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*optionalChainTransformer).visitCallExpression(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:37 +0x190
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*optionalChainTransformer).visit(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:20 +0xd0
github.com/microsoft/TypeScript/tsc/internal/ast.(*NodeVisitor).VisitNode(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/visitor.go:51 +0x30
github.com/microsoft/TypeScript/tsc/internal/ast.(*ExpressionStatement).VisitEachChild(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/ast_generated.go:1592 +0x30
... 74 lines truncated ...
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emitJSFile(...)
        github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:200 +0x198
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emit(...)
        github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:50 +0xec
github.com/microsoft/TypeScript/tsc/internal/compiler.(*Program).Emit.func2()
        github.com/microsoft/TypeScript/tsc/internal/compiler/program.go:1851 +0x1c0
🙂 Expected behavior

The compiler should not crash 😄

Additional information about the issue

Disclosure: This crash was found with a custom mutation fuzzer and AI assistance (Kimi K3). The input was minimized and then verified by hand against TypeScript 7.1.0-dev (main) and TypeScript 6.0.3.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza en tsc/internal/transformers/estransforms/optionalchain.go, especialmente en flattenChain y visitOptionalExpression, y luego inspecciona el manejo de Node.Expression en tsc/internal/ast/ast.go. Ejecuta el ejemplo minimizado e?.``( mediante la CLI con la emisión de optional-chain de ES2020. La tarea está terminada cuando el compilador ya no entra en pánico con esta entrada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
go, typescript
Área
compilers
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Activo
Claridad
Bien especificado
Aptitud para principiantes
76/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.