Si bien puede haber otros casos de uso para poder requerir archivos PEGJS directamente en Node en tiempo de ejecución, la intención principal de este problema es la cobertura del código (por ejemplo, para las pruebas de Mocha).
Este último caso de uso de cobertura de código primero necesitaría #93 (que proporciona mapas de origen) para implementarse primero. Si se implementa, se podría evitar la necesidad de una copia instrumentada separada de las pruebas + el código de clavija.
Veo que require.extensions
de Node se usa para lograr esto por ts-node
, y aunque require.extensions
está técnicamente obsoleto en Node , según las discusiones sobre https://stackoverflow.com/ question/28884377/better-way-to-require-extensions-with-node-js (particularmente en el sentido de esta respuesta ), parece ser el único mecanismo práctico aquí, y según el comentario, no creo tenemos que preocuparnos de que Node rompa Babel.
Preferiría no permitir esto.
@ExE-Boss: para nuestro caso de uso, solo sería para probar (también, no estoy seguro si notó que este es el repositorio de pegjs).
Sé que este es el repositorio PEG.js , que es exactamente el motivo por el que me opongo a implementarlo aquí.
Ok, genial... (A veces puedo seguir un enlace a otro repositorio sin darme cuenta de que no es un problema aparte, así que solo me aseguro) :)
No habrá más funciones hasta que salgan las dos líneas de 2017 que nos permiten usar módulos y flechas es6.
Además, parece que lo que realmente quieres es probar
No pones los ganchos de cobertura en la biblioteca. Los pones en el archivo de prueba.
Si desea cobertura, puede instalar jest
y listo. Incluye automáticamente todo lo que necesita y no es necesario realizar modificaciones en la biblioteca. Las herramientas de cobertura están diseñadas para agregarse desde el exterior, no desde el interior.
Este generador de analizadores no debería vincularse repentinamente al ecosistema de paquetes node.js
como una característica interna.
Además, la cobertura es un falso deseo de un analizador. Considera lo siguiente:
Food
/ "Peanuts"
/ "Shellfish"
/ "Rice"
Ahora, solo escribe una prueba para el arroz. peg
intentará Peanuts
primero, luego, cuando no funcione peg
intentará Shellfish
, luego peg
intentará Rice
Observe que solo escribió una prueba para Rice
, pero está mostrando incorrectamente la cobertura para los tres
La forma en que funciona un analizador packrat (honestamente, la forma en que se me ocurre) significa que la cobertura es falsa
no pierdas tu tiempo
En cuanto a poner ganchos de cobertura en la biblioteca, normalmente uno los pone en las pruebas, sí, pero cuando un analizador se genera automáticamente con algunas ramas relevantes y otras no, entonces tiene sentido que el autogenerador produzca esto. para que aquellos proyectos que no deseen ignorar su archivo analizador puedan hacerlo. No está relacionado con la cobertura de la biblioteca pegjs (que tiene sus propios requisitos de cobertura), sino con la cobertura del uso de la gramática por parte del analizador generado.
En su ejemplo, el analizador generado tiene líneas de código para verificar "Maní", "Mariscos" y "Arroz", y si no están cubiertos, de hecho se pueden informar.
Se vuelve más una pregunta abierta si una regla como ruleA = ruleB / ruleC
debe verificar que "reglaA" tiene casos con "reglaB" y "reglaC", o si es suficiente para verificar que "reglaA", "reglaB" , y "ruleC" se cubren de alguna manera (por ejemplo, si hay un ruleD = ruleB / ruleF
, algunos proyectos pueden considerar que su cobertura de ruleB
es suficiente para evitar la necesidad de verificar que esté cubierto dentro de "regla A", especialmente si hay muchas alternativas y combinaciones).
En cuanto a este problema, podría haber un archivo de entrada que agregara la función y otro que no.
@ brettz9 - Estaba a punto de decir "Estoy hablando con otra persona sobre lo mismo" y luego me di cuenta de que eres tú, así que voy a detener esta instancia de esta discusión a favor de la similar que estamos. teniendo el #633, si te parece bien
Estoy escribiendo algo largo allí actualmente
Comentario más útil
@ brettz9 - Estaba a punto de decir "Estoy hablando con otra persona sobre lo mismo" y luego me di cuenta de que eres tú, así que voy a detener esta instancia de esta discusión a favor de la similar que estamos. teniendo el #633, si te parece bien
Estoy escribiendo algo largo allí actualmente