El motor de reescritura (Rewrite Engine) de Smalltalk, originalmente introducido con el Refactoring Browser, es una herramienta poderosa para realizar modificaciones a nivel de árbol de sintaxis abstracta (AST). Sin embargo, su sintaxis es notoriamente compleja y difícil de recordar, incluso para tareas sencillas como reemplazar mensajes obsoletos. La complejidad radica en el uso de cadenas de texto para definir las reglas de reescritura, lo que dificulta la navegación, la finalización de código y el uso de herramientas de desarrollo estándar. Esto se agrava porque la sintaxis reside dentro de cadenas, haciéndola invisible para las herramientas de navegación típicas.
BPatterns surge como una solución a este problema. Se trata de una capa de abstracción que proporciona una API fluida y nativa de Smalltalk sobre el motor de reescritura. En lugar de usar cadenas de texto complejas, BPatterns permite definir patrones de reescritura utilizando bloques Smalltalk estándar. Esto significa que los patrones se expresan como código Smalltalk legible y mantenible, aprovechando las herramientas de desarrollo existentes como resaltado de sintaxis, finalización de código y refactorizaciones.
¿Cómo funciona? BPatterns esencialmente construye un AST de patrón utilizando las mismas clases de nodos que el motor de reescritura original, pero lo hace de manera transparente a través de bloques Smalltalk. Esto permite a los desarrolladores trabajar con la potencia del motor de reescritura sin tener que lidiar con su sintaxis intrincada. Se puede considerar como un DSL (lenguaje específico de dominio) para el motor de reescritura dentro del entorno Smalltalk.
Casos de uso: BPatterns es útil para cualquier persona que trabaje con Smalltalk y necesite realizar refactorizaciones o modificaciones a gran escala en el código. Esto incluye desarrolladores de aplicaciones Smalltalk, creadores de herramientas de desarrollo y aquellos que trabajan en proyectos de código abierto. Por ejemplo, se puede usar para reemplazar mensajes obsoletos, renombrar keywords en mensajes, intercambiar keywords, o incluso aplicar filtros complejos basados en condiciones arbitrarias.
Consideraciones: Aunque BPatterns simplifica significativamente el uso del motor de reescritura, no expone todas sus características todavía. Sin embargo, muchos de los aspectos clave están ya soportados. Una limitación es que, aunque BPatterns facilita el uso del motor, la comprensión profunda del motor de reescritura subyacente sigue siendo útil para tareas más avanzadas. Además, aunque BPatterns mejora la experiencia de desarrollo, existen herramientas dedicadas para el motor de reescritura en Pharo (como StRewriterMatchToolPresenter) que ofrecen funcionalidades adicionales. La clave es que BPatterns ofrece una alternativa más accesible y scriptable para la mayoría de los casos de uso comunes.
