developit / developit/htm

Improve transpilation error handling for missing closing tags

Abierto
#168 0 comentarios 0 reacciones 0 asignados Ver en GitHub
debugging proposal
Lenguaje dominante
JavaScript
Estrellas
9k
Forks
181
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Consider this sample code, which accidentally omits a closing tag.

```js
import htm from 'htm'
const h = (type, props, ...children) => ({type, props, children});
const html = htm.bind(h)

console.log(JSON.stringify(html`

Hello, world!`));
```

In this case, the user intended to include a closing tag `

`, and so the user's desired logged result is `{"type":"h1","props":null,"children":["Hello, world!"]}`

Transpile `htm` away using this script.

shell script

```sh
#!/bin/sh -ex

rm -rf babel-htm-errors
mkdir babel-htm-errors
cd babel-htm-errors
npm init -y
npm i -D @babel/cli @babel/core babel-plugin-htm
cat < .babelrc
{
"plugins": [
["htm", {
"pragma": "h"
}]
]
}
EOF
cat < index.js
import htm from 'htm'
const h = (type, props, ...children) => ({type, props, children});
const html = htm.bind(h)

console.log(JSON.stringify(html\`

Hello, world!\`));
EOF
npx babel index.js > output.mjs
node output.mjs
```

Expected: Transpilation should fail with an error.

Actual: The `html` line transpiles to:

```js
console.log(JSON.stringify("Hello, world!"));
```

The `

` tag is silently dropped.

(Note that this error behavior is different from the runtime behavior of htm with mismatching closing tags; see issue #166.)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.