BookinglyTech News
Software

Tilia, el nuevo formatter que resuelve comentarios, fixities y CPP en Haskell

Mark Karpov ha lanzado Tilia, un formatter de Haskell que aborda de manera integral los problemas de comentarios, inferencia de fixities y preprocesador C.

2 min de lecturaLobsters0 vistas

Tilia llega al ecosistema de Haskell como una solución que pretende acabar con los tres retos que históricamente han dificultado la formateación del código. El autor, Mark Karpov, explica que con la disponibilidad de ghc‑lib‑parser ya se podía construir la parte de análisis/impresión, pero la gestión de comentarios, la inferencia de fixities de operadores y el soporte a CPP seguían siendo obstáculos.

Comentarios y fixities

Karpov dedica la primera parte de su post a la correcta interpretación de comentarios, algo que antes requería de heurísticas. Con Tilia se consigue una solución declarativa, que se integra con Cabal para resolver dependencias y descargar fuentes cuando sea necesario.

La inferencia de fixities se resuelve de forma automática leyendo los archivos de interfaz de los paquetes instalados o, en caso de que no estén presentes, analizando el código fuente. Esto implica rastrear re‑exportaciones, ciclos, nombres de espacio y la forma en que se importan los módulos. La herramienta se asegura de que cada operador tenga su fixity asociada de manera precisa y, en caso de ambigüedad, reporta el conflicto en lugar de asumir una prioridad.

Soporte a CPP

El preprocesador C se convierte en un constructo formateable gracias a la incorporación de técnicas de análisis de la literatura, como el trabajo de "Parsing All of C by Taming the Preprocessor". Tilia puede procesar código con directivas de CPP sin necesidad de una compilación previa, lo que facilita la formateación de proyectos que dependen de macros.

Integración con Cabal y Nix

Tilia se integra a Cabal como un componente que consulta el plan de construcción y, si es necesario, genera uno nuevo. El coste inicial de descarga y análisis de paquetes se limita a unos segundos, incluso para proyectos grandes que no se hayan compilado antes. En entornos Nix la herramienta funciona sin descargar nada, ya que lee directamente los archivos de interfaz.

Uso

El CLI se basa en componentes Cabal:

$ tilia inplace [COMPONENT]
$ tilia check [COMPONENT]

El componente puede omitirse y la herramienta operará sobre todos los archivos .hs del proyecto. Tilia también funciona con proyectos Stack y con dependencias privadas provistas por GitHub o URLs arbitrarias.

Disponibilidad

Tilia está disponible en GitHub y se puede integrar en flujos CI mediante la acción de GitHub creada por el mismo autor.

Repositorio en GitHub GitHub action

Por qué importa

Para los administradores de sistemas y arquitectos que gestionan bases de código Haskell, Tilia elimina una fuente de inconsistencias en el estilo de los archivos. Al poder inferir fixities y manejar CPP de forma fiable, la herramienta permite integrar la formateación en pipelines de CI sin intervención manual. La dependencia de Cabal para resolver paquetes también simplifica la gestión de dependencias en proyectos heterogéneos.

En resumen, Tilia consolida tres desafíos que antes requerían de soluciones fragmentadas, ofreciendo un formatter robusto y preciso que se adapta a la realidad de los proyectos Haskell modernos.