Analizador estático Detekt para Kotlin

¡Es hora de amar los analizadores estáticos! Conoce a Detekt en Kotlin


Si ya sabe lo que se discutirá y solo está interesado en implementar el proyecto, proceda inmediatamente al punto de instalación.

Que es esto


imagen

Análisis de software realizado (en oposición al análisis dinámico) sin ejecución real de los programas en estudio. Wikipedia

Y en sus propias palabras, es una herramienta conveniente que lo ayuda a cumplir con las reglas del buen código. Permitiendo una personalización muy flexible de los filtros mediante la definición de código incorrecto. Que en cada lanzamiento generará un informe determinado, que incluye estadísticas sobre conflictos detectados, información sobre ellos, lo que permite determinar dónde ocurrió el conflicto y su tipo.

Los analizadores estáticos facilitan el trabajo del revisor y generalmente ahorran tiempo al equipo de desarrollo.

Supongamos que tenemos un buen PR, sin embargo, el autor dio nombres que son demasiado largos para las variables, escribió un código que se puede simplificar fácilmente o infringió una de las muchas reglas establecidas en el archivo de configuración de Detekt, las reglas no son complicadas, pero la revisión de código no pasará dicho PR.
El autor nuevamente tendrá que cambiar entre proyectos, así como los revisores, estoy seguro de que la revisión repetida traerá poco placer.
Automatice si es rápido y no es costoso. (C) sentido común

¿Qué son los analizadores estáticos?


Para java:


Para Kotlin:


Respondo la pregunta que surgió en tu cabeza, Spot-bugs en Kotlin no funciona.

Introduciendo Detekt en el proyecto


Detect se puede instalar de varias maneras:

  1. Plugin para AndroidStudio
  2. Gradle

Creo que la configuración a través de Gradle es más flexible y estoy hablando de eso.

En el sitio web oficial hay varias formas de instalar Detekt en el proyecto, dependiendo de la versión de Gradle, ya sea un proyecto de Android. Pero, en mi experiencia de implementar un proyecto de Android, algunas instrucciones no funcionan . Por el momento, el proyecto está muy cerca de la versión 1.0. La última versión en el momento de escribir este artículo es la versión candidata 1.0.0-RC14

Entonces

Vamos al sitio web oficial de Gradle y vemos las instrucciones de instalación.

buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.0-RC14" } } 

Es esta decisión la que aconsejo seguir para el proyecto de Android.

Probablemente haya notado que eliminé la línea de complemento apply: ya que le aconsejo que separe Detekt en un archivo separado y que aplique ya en él.

Etapa 1:


Entonces, copie este código al nivel de aplicación build.gradle.

Allí, en el bloque de todos los proyectos, deberíamos escribir una línea para aplicar nuestro archivo que contiene la configuración de detekt.

 allprojects { apply from: "$rootDir/detekt.gradle" repositories { maven { url "https://plugins.gradle.org/m2/" } } } 

Etapa 2:


Entonces necesita crear el archivo detekt.gradle

 apply plugin: "io.gitlab.arturbosch.detekt" detekt { toolVersion = "1.0.0-RC14" // Version of the Detekt CLI that will be used. When unspecified the latest detekt version found will be used. Override to stay on the same version. input = files("src/main/java") // The directories where detekt looks for input files. Defaults to `files("src/main/java", "src/main/kotlin")`. parallel = true // Builds the AST in parallel. Rules are always executed in parallel. Can lead to speedups in larger projects. `false` by default. filters = ".*build.*,.*/resources/.*,.*/tmp/.*" // Regular expression of paths that should be excluded separated by `;` or `,`. config = files("$rootDir/detekt-config.yml") // Define the detekt configuration(s) you want to use. Defaults to the default detekt configuration. reports { xml { enabled = true // Enable/Disable XML report (default: true) destination = file("build/reports/detekt.xml") // Path where XML report will be stored (default: `build/reports/detekt/detekt.xml`) } html { enabled = true // Enable/Disable HTML report (default: true) destination = file("build/reports/detekt.html") // Path where HTML report will be stored (default: `build/reports/detekt/detekt.html`) } } } 

Etapa 3:


Ahora necesita crear el archivo de configuración detekt-config.yml

Este es un archivo de configuración estándar del sitio oficial .

Etapa 4:


Abra una consola y ejecute el comando: gradlew detekt

Eso es todo!


Ahora tiene estadísticas listas para su proyecto. Se muestran en la consola y también puede encontrarlos en la ruta: {u_project} \ app \ build \ reports \ detekt

En conclusión


Es muy conveniente usar Detekt al construir en Jenkins
El tiempo de ejecución de la tarea en un proyecto con más de 2000 clases es de 4-7 segundos *.

Quiero decir que usar un analizador estático simplifica un poco nuestro trabajo. Acelera el proceso de desarrollo y ahorra dinero empresarial.

Referencias

Detekt github
Configurar detekt
default-detekt-config.yml

Source: https://habr.com/ru/post/442500/


All Articles