Integración de Ktlint en Proyectos Android.
Integración de Ktlint en Proyectos Android, Configuración, Uso y Automatización con Hooks de Git
Ktlint es una herramienta para formatear y analizar código en Kotlin, diseñada para garantizar que el código fuente siga las convenciones de estilo establecidas.
Al integrar Ktlint en nuestros proyectos de Android y Kotlin Multiplatform, garantizamos que nuestro código fuente sea consistente y siga las convenciones de estilo acordadas. Facilitando de este modo la colaboración en equipo, ya que todos los desarrolladores trabajan bajo las mismas directrices, reduciendo conflictos y mejorando la legibilidad del código. Además, con Ktlint podremos automatizar la verificación y el formateo del código, ahorramos tiempo y minimizamos errores, permitiendo que el equipo se enfoque en tareas más críticas del desarrollo.
Consistencia en el código: aplicaremos de manera uniforme las reglas de estilo en todo el proyecto, lo que resulta en un código más legible y mantenible, facilitando de este modo la uniformidad del código bajo las mismas directrices de formato.
Integración en flujos de trabajo: La herramienta puede incorporarse en sistemas de integración continua y en procesos de revisión de código, permitiendo la detección automática de infracciones de estilo antes de que el código sea fusionado. Esto reduce la necesidad de correcciones manuales y disminuye la probabilidad de errores humanos.
Ahorro de tiempo y recursos: Al automatizar el formateo y la verificación del estilo de código.
Prevención de conflictos en el control de versiones: La aplicación consistente de reglas de estilo, reduce los conflictos durante las fusiones en sistemas de control de versiones como Git.
Instalación
Integrar Ktlint en tu proyecto es muy sencillo y se puede lograr en unos pocos pasos. Para proyectos de Android o Kotlin Multiplatform, la integración con Gradle es esencial.
Si estás utilizando un version catalog, puedes añadir Ktlint de la siguiente manera:
- En el archivo gradle/libs.versions.toml, añade las siguientes entradas:
[versions]
ktlint = "12.1.1"
[libraries]
…
[plugins]
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
2. Después en el archivo build.gradle.kts del proyecto
plugins {
…
alias(libs.plugins.ktlint) apply true
}
ktlint {
android = true
reporters {
reporter(ReporterType.CHECKSTYLE)
reporter(ReporterType.HTML)
reporter(ReporterType.PLAIN)
}
}
subprojects {
apply(plugin = "org.jlleitschuh.gradle.ktlint")
}
La opción reporters {} en la configuración de Ktlint es opcional y permite generar informes en diferentes formatos según tus necesidades.
En el repositorio oficial de Ktlint en GitHub, puedes encontrar configuraciones adicionales útiles, como
filter {
exclude("**/generated/**")
include("**/kotlin/**")
}
Al llegar a este punto, Ktlint ya está habilitado en tu proyecto, permitiéndote utilizar los scripts de Gradle para validar el código con ktlintCheck o formatearlo con ktlintFormat.
Sin embargo, en proyectos que utilizan Jetpack Compose, es posible que encuentres advertencias como la siguiente:
Summary error count (descending) by rule:
standard:function-naming: 1
Esto ocurre porque Ktlint aplica la regla standard:function-naming, que exige que los nombres de las funciones comiencen con una letra minúscula y utilicen camelCase. No obstante, en Jetpack Compose los composables utilizan el formato PascalCase, lo que genera este conflicto.
Para resolver este inconveniente, puedes configurar Ktlint para que ignore esta regla en las funciones anotadas con @Composable. Una forma de lograrlo es añadiendo la siguiente configuración en tu archivo .editorconfig:
[*.{kt,kts}]
ktlint_function_naming_ignore_when_annotated_with=Composable
De este modo le indicaremos a Ktlint que omita la regla de nombrado de funciones para aquellas que estén anotadas con @Composable
Aquí un ejemplo de .editorconfig aplicado en un proyecto KMP
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{kt,kts}]
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
indent_style = space
indent_size = 4
ktlint_function_naming_ignore_when_annotated_with = Composable
max_line_length = 100
[**/commonTest/**/*Test.kt]
max_line_length = 120
[**/build/**/*]
ktlint = disabled
Integrar Ktlint en tu flujo de trabajo mediante hooks de Git es una estrategia eficaz para garantizar que el código cumpla con las convenciones de estilo antes de ser confirmado o enviado al repositorio. El plugin de Ktlint para Gradle facilita esta integración, permitiendo añadir hooks predefinidos de manera sencilla.
Añadir hooks pre-commit para Ktlint
El plugin proporciona tareas auxiliares que configuran automáticamente los hooks de Git. Para añadir un hook que verifique el estilo del código antes de cada commit, ejecuta:
./gradlew addKtlintCheckGitPreCommitHook
Si prefieres que el hook formatee automáticamente el código antes de cada commit, puedes utilizar:
./gradlew addKtlintFormatGitPreCommitHook
Estos hooks pueden ser personalizados y adaptarlos a las necesidades de nuestro proyecto. Puedes modificar los scripts generados en el directorio .git/hooks/
Además, puedes explorar recursos adicionales que profundizan en la automatización de Ktlint con hooks de Git:
- Automate Ktlint Checks with Git Hooks: Avoiding Code Style Violations in Code Reviews
- Ktlint with pre-commit Hook: Git Hooks in Kotlin Made Easy
Enlaces
Comentarios