Entonces, en realidad estoy bastante interesado en el complemento de mecanografiado de @pjmolina del n. ° 514. Sin embargo, al final, devuelve all
.
Esperaba que me ayudaras a hacer trampa. De hecho, solo quiero escribir la firma en parse/1
forma ligeramente diferente, agregando algún tipo de cosa a la sintaxis peg
que dice "hacer de este el tipo de retorno de parse/1
", y también marcando el argumento de entrada :string
si hay un tipo de salida. Entonces, solo tendría que encasillar ciegamente el último valor de retorno, et voila.
Para un usuario de mecanografiado (o tipo de flujo), esto tendría un profundo impacto en la verificación, aunque sea falso .
¿Cuántos capuchinos necesito enviarte por correo para que esto suceda y a qué dirección los enviaría?
Todo lo que realmente necesito es que la firma de la función se escriba como
function parse(input: string): MyType { ... }
(o lo que sea)
Puedes inspirarte en esto . De antemano es necesario etiquetar tipos de todos los bloques de código, se puede hacer con anotaciones . Después de este trabajo preparatorio, es posible ingresar información sobre tipos en el generador.
@Mingun : esto es interesante, pero también muy difícil de entender
Su anotación parece ser un caso casi ideal aquí: permitiría la anotación de reglas de análisis individuales con tipos, lo que permitiría el retorno de más de un tipo real
(El momento extraño en el que entendí que @Mingun también es ruso).
En realidad, TypeScript no hará que el desarrollo de gramáticas sea más fácil, porque tiene que anotar tipos en todas partes y porque su sistema de tipos está un poco roto. Recientemente hice un pequeño experimento para hacer un PEG.ts, y el verificador de tipos de TypeScript arrojó mensajes de error tan horribles cuando lo alimenté con tipos recursivos, que ni siquiera pude terminarlo.
Recomiendo mirar más bien el soporte de Infernu .
@polkovnikov-ph: sí, esa elección no está en mis manos y, además, como desarrollador de plantillas C++ de la década de 1990, los mensajes de error de mecanografiado no me asustan
de todos modos, lo que necesito es poder agregar analizadores a un sistema mecanografiado, por lo tanto, es valioso para mí obtener anotaciones mecanografiadas de parse/1
ahora mismo lo estoy haciendo con tipos maestros brutos y casting. Ojalá pudiera hacerlo mejor
¡Hola! En relación con esto, en el complemento ts-pegjs
hemos implementado la escritura de salida opcional para las reglas de producción. Número 11 , PR 16
Lo hicimos usando una tabla de pares "rule-name": "return-type"
a través de la opción returnTypes
.
Soy cc usted, en caso de que haya decidido agregar opcionalmente información de tipo en pegjs en el nivel de DSL para anonar producciones directamente.
Podría ser bastante útil para la salida de TypeScript, también para Flow o cualquier otra variante de JS escrita.
La gente sigue pidiendo esto en el #597
El nuevo mantenedor creó y alojó un .d.ts
, por lo que obviamente está abierto a mecanografiar
Este es un "tenemos mecanografiado" del mismo día sin cambios importantes, que se puede hacer en cinco líneas de código más el pie de página del módulo es6 de reemplazo. no entiendo porque no se hace
Tengo un parche listo para 0.11
pero 0.11
no se fusiona y 0.12
no está disponible para trabajar con él
Comentario más útil
¡Hola! En relación con esto, en el complemento
ts-pegjs
hemos implementado la escritura de salida opcional para las reglas de producción. Número 11 , PR 16Lo hicimos usando una tabla de pares
"rule-name": "return-type"
a través de la opciónreturnTypes
.Soy cc usted, en caso de que haya decidido agregar opcionalmente información de tipo en pegjs en el nivel de DSL para anonar producciones directamente.
Podría ser bastante útil para la salida de TypeScript, también para Flow o cualquier otra variante de JS escrita.