Detekt Static Analyzer für Kotlin

Es ist Zeit, statische Analysegeräte zu lieben! Treffen Sie Detekt in Kotlin


Wenn Sie bereits wissen, was besprochen wird, und nur an der Implementierung des Projekts interessiert sind, fahren Sie sofort mit dem Installationspunkt fort.

Was ist das


Bild

Die Softwareanalyse wurde (im Gegensatz zur dynamischen Analyse) ohne tatsächliche Ausführung der untersuchten Programme durchgeführt. Wikipedia

Und in Ihren eigenen Worten ist es ein praktisches Tool, mit dem Sie die Regeln für guten Code einhalten können. Ermöglicht eine sehr flexible Anpassung der Filter durch die Definition von fehlerhaftem Code. Bei jedem Start wird ein bestimmter Bericht erstellt, der statistische Daten zu erkannten Konflikten sowie Informationen zu diesen Konflikten enthält, anhand derer festgestellt werden kann, wo der Konflikt aufgetreten ist und welchen Typ er hat.

Statische Analysegeräte erleichtern dem Prüfer die Arbeit und sparen dem Entwicklungsteam im Allgemeinen Zeit.

Angenommen, wir haben eine gute PR, aber der Autor hat Namen angegeben, die für die Variablen zu lang sind, Code geschrieben, der leicht vereinfacht werden kann, oder eine der vielen festgelegten Regeln in der Detekt-Konfigurationsdatei verletzt. Die Regeln sind nicht kompliziert, aber eine Codeüberprüfung einer solchen PR funktioniert nicht.
Der Autor wird wieder zwischen Projekten wechseln müssen, ebenso wie die Rezensenten. Ich bin sicher, dass eine wiederholte Rezension wenig Freude bereiten wird.
Automatisieren, wenn es schnell und nicht teuer ist. (C) Gesunder Menschenverstand

Was sind statische Analysegeräte?


Für Java:


Für Kotlin:


Ich beantworte die Frage, die in deinem Kopf auftauchte: Spot-Bugs auf Kotlin funktionieren nicht.

Einführung von Detekt in das Projekt


Detect kann auf verschiedene Arten installiert werden:

  1. Plugin für AndroidStudio
  2. Gradle

Ich denke, die Konfiguration über Gradle ist flexibler und ich spreche darüber.

Auf der offiziellen Website gibt es verschiedene Möglichkeiten, Detekt im Projekt zu installieren, abhängig von der Version von Gradle, ob es sich um ein Android-Projekt handelt. Nach meiner Erfahrung mit der Implementierung eines Android-Projekts funktionieren einige Anweisungen jedoch nicht . Im Moment ist das Projekt sehr nahe an der Veröffentlichung von 1.0. Die aktuellste Version zum Zeitpunkt des Schreibens ist Release Candidate 1.0.0-RC14

Also.

Wir besuchen die offizielle Gradle- Website und sehen uns die Installationsanweisungen an.

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

Es ist diese Entscheidung, die Sie für das Android-Projekt einhalten sollten.

Sie haben wahrscheinlich bemerkt, dass ich die Apply: Plugin-Zeile entfernt habe, da ich Ihnen rate, Detekt in eine separate Datei zu trennen und Apply bereits darin anzuwenden.

Stufe 1:


Kopieren Sie diesen Code in das Build.gradle auf Anwendungsebene.

Dort sollten wir im Block allprojects eine Zeile zum Anwenden unserer Datei schreiben, die Detekt-Einstellungen enthält.

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

Stufe 2:


Dann müssen Sie die Datei detekt.gradle erstellen

 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`) } } } 

Stufe 3:


Jetzt müssen Sie die Konfigurationsdatei detekt-config.yml erstellen

Dies ist eine Standardkonfigurationsdatei von der offiziellen Website .

Stufe 4:


Öffnen Sie eine Konsole und führen Sie den folgenden Befehl aus: gradlew detekt

Das ist alles!


Jetzt haben Sie Statistiken für Ihr Projekt bereit. Sie werden in der Konsole angezeigt und können auch im Pfad gefunden werden: {u_project} \ app \ build \ reports \ detekt

Abschließend


Es ist sehr praktisch, Detekt beim Bauen in Jenkins zu verwenden
Die Ausführungszeit für Aufgaben in einem Projekt mit mehr als 2000 Klassen beträgt 4-7 Sekunden *.

Ich möchte sagen, dass die Verwendung eines statischen Analysators unsere Arbeit ein wenig vereinfacht. Beschleunigt den Entwicklungsprozess und spart Geschäftsgeld.

Referenzen:

Detekt Github
Detekt einrichten
default-detekt-config.yml

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


All Articles