Menu Button
Go to Top

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:

  1. 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:

Enlaces

Pagina oficial Ktlint

Repositorio GitHub

Plugin Ktlint gradle

Reglas avanzadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Comentarios

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad