microsoft / microsoft/TypeScript

Parser misinterprets async() calls in conditional expressions as async arrow functions

Ouverte
#64,231 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

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

Description

🔎 Search Terms

parser, async, conditional

🕗 Version & Regression Information
  • This is the behavior in every version I tried
⏯ Playground Link

No response

💻 Code
const a = true;
const b = 1;

function async(): number {
  return b;
}

const first = a ? async() : 0;
//                       TS1005: '=>' expected.

const second = a ? async() : x => x;
//                                TS1005: ':' expected.
🙁 Actual behavior

The parser appears to interpret async() as the beginning of an async arrow function and the conditional separator as a return-type annotation.
The first case also produces a syntax diagnostic when parsed as JavaScript after removing the : number annotation. Node accepts and executes that JavaScript equivalent

🙂 Expected behavior

Both conditional expressions should parse successfully. async() is a call to the function named async, and the following colon separates the conditional’s branches.

Additional information about the issue

Oxc fix: https://github.com/oxc-project/oxc/pull/26537

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 reproduire les deux exemples d’expressions conditionnelles dans le parseur TypeScript et comparez la manière dont async() est classé par rapport à une fonction fléchée async. Utilisez le correctif Oxc lié comme référence pour le comportement d’analyse syntaxique concerné. Le travail est considéré comme terminé lorsque les deux exemples sont analysés avec succès sans les diagnostics signalés, avec une couverture de régression pour les cas présentés.

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

Évaluation

Stack technique
javascript, typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
68/100

Recevez les nouvelles issues par e-mail

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