microsoft / microsoft/TypeScript

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

Aperta
#64,231 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

🔎 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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo i due esempi di espressioni condizionali nel parser TypeScript e confronta il modo in cui async() viene classificato rispetto a una funzione freccia async. Usa il fix di Oxc collegato come riferimento per il comportamento di parsing rilevante. Il lavoro è completato quando entrambi gli esempi vengono analizzati correttamente senza le diagnostiche segnalate, con una copertura di regressione per i casi mostrati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
68/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.