Retos técnicos al construir un formateador para el lenguaje Gren

Fuentes: Challenges when writing gren-format

Este artículo describe los problemas técnicos que surgieron al construir gren-format, un formateador de código para el lenguaje Gren, y las decisiones de diseño adoptadas para resolverlos. Como Gren todavía está en evolución, el formateador no tiene un analizador sintáctico propio: reutiliza el parser v2 del compilador, lo que garantiza que solo acepta código válido según el propio compilador. El precio a pagar es que el árbol sintáctico resultante carece de comentarios y de ciertos signos de puntuación como =, :, ,, |, ->, then e in, conservando únicamente operadores y corchetes.

El autor explica que esta ausencia obliga al formateador a recolocar los comentarios a partir de sus coordenadas de fila y columna, una operación delicada porque la propia formateación invalida esas coordenadas tras el primer paso. Para evitar resultados inconsistentes entre ejecuciones sucesivas, el equipo introduce el concepto de barrera de posición: cada comentario recibe un rol único (siete valores posibles) decidido una sola vez, antes de que el código fuente se modifique. Después, una función de lowering elimina todos los campos de posición del árbol que recibe el renderizador, de modo que leer una posición tras la barrera se convierte en un error de compilación. Esto reduce a una sola función, pequeña y argumentable, la superficie donde pueden divergir dos formateados consecutivos. El artículo incluye ejemplos concretos de árboles sintácticos y listas de comentarios, y cierra con tres requisitos que debe cumplir la recolocación de comentarios y un caso real de bug en el que, pese a cumplir dos de ellos, se fallaba el tercero.