microsoft / microsoft/TypeScript

Automatic Brace Insertion (ABI) is undesirable

Ouverte
#34,876 4 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Awaiting More Feedback Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

TypeScript Version: 3.7-beta

Search Terms: automatic brace insertion ABI syntax error

Code:

function a() {
    "Automatic Brace Insertion! (ABI)";

Expected behavior:

The input is syntactically invalid, so emit should fail regardless of the state of noEmitOnError. Other forms of un-parsable input already do this, e.g. function a(

Actual behavior:

A closing brace is inserted in the emitted JS code.

function a() {
    "Automatic Brace Insertion! (ABI)";
}

This means that users who are not using noEmitOnError are silently having invalid code transformed into valid code. I can confirm this actually happened to someone shipping something to production.

Playground Link: ABI Playground Link

Related Issues: https://github.com/microsoft/TypeScript/issues/34870 , https://github.com/microsoft/TypeScript/issues/34871 , Lazy Twitter report

I would suggest this bug deserves to be fixed based on Design Goal 7 (Preserve runtime behavior of all JavaScript code) and Design Non-Goal 7 (Introduce behaviour that is likely to surprise users).

Tagline: If the braces don't fit, you must not emit.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le ABI Playground Link et l’entrée TypeScript minimale présentée dans l’issue, puis comparez son comportement d’emit avec l’exemple lié d’une fonction non terminée. Suivez le traitement de cette entrée malformée par le compilateur et vérifiez que emit n’ajoute pas d’accolade fermante et ne produit pas de JavaScript exécutable.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.