En esta primera parte del artículo, en primer lugar, quiero demostrar que vale la pena el tiempo para escribir una regla de análisis de código personalizado para hacer cumplir las convenciones de código. En segundo lugar, quiero demostrar que, además de Checkstyle y ktlint, también hay que tener en cuenta Android Lint a la hora de crear una regla de análisis de código relacionada con el formato, a pesar de no ser ese su propósito básico. Explicaré su principal ventaja en mi caso frente a las otras herramientas, y describiré el funcionamiento interno que proporciona este beneficio. Para inspirarme, también mostraré los pasos que seguí para hacer que mi regla de formato funcionara con Android Lint.
Motivación
Me frustro cuando recibo comentarios relacionados con el formato en mis solicitudes de fusión o cuando tengo que añadir dichos comentarios a las de otros. A veces, tenemos que cambiar de rama para arreglar un solo error de formato en nuestra RM, lo cual es bastante desmotivador. Por eso empecé a pensar en formas de automatizar la solución de este problema menor (pero importante), para poder centrarnos en cuestiones más complejas durante las revisiones de código.
Utilizamos varias herramientas de lint, como ktlint o Checkstyle, para hacer cumplir las convenciones de formato globales (orden de las variables, longitud de las líneas, etc.), pero éstas no incluyen ciertas reglas de la empresa por defecto. Para esos casos, las herramientas mencionadas anteriormente también permiten añadir reglas personalizadas. He decidido escribir una para los errores de formato más comunes que cometemos:
Siempre requerimos saltos de línea dobles antes y después de las «sentencias de bloque», que pueden ser los bloques if, switch (cuando en Kotlin), for, try o while, a menos que estén exactamente al principio o al final de un método u otro bloque. Creemos que esto hace que nuestro código sea más legible, por eso siempre dejamos un comentario durante la revisión del código si alguien viola esta regla (y si por casualidad nos damos cuenta).
Cuál es la mejor herramienta para este problema
Podemos decir que ktlint para Kotlin y Checkstyle para Java son las principales herramientas de análisis de código de formato, pero ahora voy a elegir otra herramienta todavía: Android Lint (no sólo para proyectos Android), porque también soporta la escritura de reglas personalizadas que se pueden aplicar a Kotlin y Java al mismo tiempo. Parece una opción más lógica, porque usamos ambos lenguajes en nuestros proyectos Android, y no quería ni escribir la misma regla dos veces ni mantenerlas simultáneamente. Por no hablar de la integración de la regla, que también habría que hacer dos veces.
Por qué Java sigue siendo importante en absoluto
Como desarrollador de Android, tengo que escribir código tanto en Java como en Kotlin. Sin embargo, podemos decir que ya no vale la pena centrarse en Java, porque a medida que Kotlin va surgiendo, lo usamos cada vez más en lugar de Java en nuestra base de código. Por otro lado, creo que la transición no está ocurriendo tan rápidamente en los grandes proyectos que ya están en producción. Así que, como queremos ver código bien formateado también en Java, es importante tener esta regla para ambos lenguajes.
Cómo escribir reglas de lint personalizadas
Hay muchos tutoriales y artículos sobre cómo escribir reglas de análisis de código personalizadas, así que no lo detallaré demasiado en este post. Pero si te interesa, aquí tienes un par de enlaces que te recomiendo para las diferentes herramientas: A Checkstyle, el doc oficial, a ktlint y a Android Lint, los estupendos artículos de Niklas Baudy en el medio.