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

Cerrado Apto para principiantes
#9,132 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Ya se ha fusionado un pull request relacionado.

  • #9145 de @cknitt — fusionado

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
74/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
ocaml
Área
compilers

Línea de trabajo

Lee compiler/syntax/src/jsx_ppx.ml, especialmente el manejo de la versión de @@jsxConfig en las líneas 53–56 y las comprobaciones de transformación en las líneas 107 y 124. Primero revisa la validación cercana y las pruebas de configuración de JSX. Añade cobertura que muestre que una versión no compatible, como 3, informa de un error en el campo version; el objetivo se cumple cuando la configuración no válida ya no deja JSX sin transformar silenciosamente.

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

Descripción

@@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.

Lenguaje dominante
OCaml
Estrellas
7.5k
Forks
484
Merge medio
20 h 50 min
PR fusionados (30 d)
266

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

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.

Más de rescript-lang/rescript

Todos los issues de rescript-lang/rescript

Issues similares

Más issues de Compilers

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.