`@@jsxConfig({version: 3})` silently disables the JSX transform

Chiusa Adatta ai principianti
#9,132 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Una pull request collegata è già stata integrata.

  • #9145 di @cknitt — integrata

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
74/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
ocaml
Ambito
compilers

Direzione di ricerca

Leggi compiler/syntax/src/jsx_ppx.ml, in particolare la gestione della versione di @@jsxConfig alle righe 53–56 e i controlli di trasformazione alle righe 107 e 124. Esamina prima la validazione circostante e i test per la configurazione JSX. Aggiungi un test che mostri che una versione non supportata, come 3, segnala un errore sul campo version; il lavoro è completato quando la configurazione non valida non lascia più JSX non trasformato senza segnalarlo.

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

Descrizione

@@jsxConfig accepts any version and stores it without checking (compiler/syntax/src/jsx_ppx.ml:53-56). The transform only runs when the version is 4 (jsx_ppx.ml:107, :124). Any other value, e.g. a leftover version: 3 from the JSX v3 days, silently turns the JSX transform off for the rest of the file. There is no error or warning.

@@jsxConfig({version: 3})

module C = {
  @react.component
  let make = () => React.null
}

let x = <div />

bsc -bs-jsx 4 -dsource on master (6ea63e5a91) shows the file untransformed: make keeps its @react.component attribute, there is no props type, and <div /> stays a JSX node. With version: 4, the same file is transformed as expected (type props, React.component, ReactDOM.jsx).

Expected: an error for unsupported JSX versions (only 4 exists since v11/v12), pointing at the version field. JSX v3 support is gone, so this should not fall through to an untransformed AST.

Possibly related cleanup: since only v4 remains, Jsx_common.version could become an enabled flag, and the no-op -bs-jsx-mode flag could go in v13.

Lingua principale
OCaml
Stelle
7.5k
Fork
484
Merge medio
17h 2m
PR unite (30g)
249

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

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.

Altre issue di rescript-lang/rescript

Tutte le issue di rescript-lang/rescript

Issue simili

Altre issue su Compilers

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.