In diesem Beitrag möchte ich dir zeigen, wie du Groovy-Lint einrichtest, um die Codequalität deiner Groovy-Projekte zu tracken und im besten Fall sogar zu erhöhen.
Die offizielle Dokumentation zu Groovy-Lint findest du unter https://github.com/nvuillam/npm-groovy-lint.
Warum sollte ich die Codequalität analysieren?
Fehler können passieren und jeder Entwickler macht Fehler, aber manchmal schleichen sich Fehler ein, welche man nicht sofort sieht oder nur in einer bestimmten Konstellation auftreten können.
Mit einer Code-Analyse können einige solcher Fehler automatisch gefunden werden. Die Analyse wird meist anhand von bestehenden Rules durchgeführt, welche sich jedoch konfigurieren lassen.
Das Ergebnis einer Code-Analyse kann zu weiteren Schritten im Softwareprojekt führen, zbsp. die Einführung eines Patterns, erweitern einer Definition of Done etc.
Wenn sehr früh im Projekt mit einer automatischen Analyse begonnen wird, wirkt sich dieses positiv auf die Entwicklung des Codes aus, denn diese kleinen Fehler hinterher zu fixen fehlt meistens die Zeit oder der Kunde sieht dieses als weniger schwierig an und möchte eher seine Requirements umgesetzt haben.
Ein kleines Groovy Projekt
Im Nachfolgenden benötigen wir ein kleines Groovy-Projekt, hier möchte ich dir ein einfaches Eclipse-Projekt zum Download anbieten.
Ich beziehe mich bei den Beispielen auf dieses Projekt, wenn du dieses nicht verwenden möchtest, dann musst du die Befehle für dein Projekt anpassen.
Wie richte ich Groovy-Lint ein?
Damit wir dieses kleine Kommandozeilentool ausführen können, benötigen wir Node.JS welches wir kostenfrei unter https://nodejs.org/en/ herunterladen können (während der Installation werden Administrationsrechte benötigt).
Wenn Node.JS installiert wurde, wurde zusätzlich der Package Manager NPM mitinstalliert, über welchen wir nun groovy-lint auf der Kommandozeile mit dem nachfolgenden Befehl installieren.
npm install -g npm-groovy-lint
Ausführen von Groovy-Lint
Wenn alles erfolgreich installiert wurde, können wir unser Groovy-Projekt mit Groovy-Lint prüfen. Dabei können wir entweder nur einzelne Dateien prüfen oder auch ganze Verzeichnisse / Packages.
eine Groovy Datei prüfen
Mit dem Befehl “npm-groovy-lint /pfad/zur/Datei.groovy” können wir eine einzelne Datei prüfen. Nach der Prüfung wird das Ergebnis in der Kommandozeile ausgegeben und wir können daraus To-do ableiten.
In meinem Fall wurden an der Klasse “Greetings.groovy” 8 Auffälligkeiten in 2 Schwierigkeitsgraden gefunden.
Das Tool stellt zusätzlich auf der Kommandozeile dar, was gemacht werden muss, um diese vermeintlichen Fehler zu beheben.
┌─────────┬───────────┬─────────────┐
│ (index) │ Severity │ Total found │
├─────────┼───────────┼─────────────┤
│ 0 │ 'Error' │ 0 │
│ 1 │ 'Warning' │ 1 │
│ 2 │ 'Info' │ 7 │
└─────────┴───────────┴─────────────┘
In meinem Fall musste ich in der IDE den Formatter anpassen, JavaDoc hinzufügen und den AccessModifier “public” an der Methode “sayHello” entfernen.
package de.draegerit.samplehelloword import groovy.transform.CompileStatic /** * Klasse zum ausgeben einer Begrüßung auf der Kommandozeile. * * @author Stefan Draeger */ @CompileStatic class Greeting { /** * Methode erzeugt eine Ausgabe auf der Kommandozeile * im Format "Hello" gefolgt von den Parametern. * @param firstname - Vorname * @param lastname - Nachname */ void sayHello(String firstname, String lastname) { println("Hello $firstname $lastname") } }
npm-groovy-lint results in 1 linted files:
┌─────────┬───────────┬─────────────┐
│ (index) │ Severity │ Total found │
├─────────┼───────────┼─────────────┤
│ 0 │ 'Error' │ 0 │
│ 1 │ 'Warning' │ 0 │
│ 2 │ 'Info' │ 0 │
└─────────┴───────────┴─────────────┘
C:\Tools\Workspaces\SampleHelloWorldProject\src\de\draegerit\samplehelloword>
ein Verzeichnis / Package prüfen
Wenn wir ein ganzes Verzeichnis oder ein Package prüfen wollen, dann lassen wir am Befehl einfach den Dateinamen am Ende weg.
npm-groovy-lint /pfad/zum/Vezeichnis
--oder für das aktuelle Verzeichnis einfach nur
npm-groovy-lint
Ein Report erzeugen
Wenn man ein ganzes Projekt prüft, nutzt die Ausgabe in der Konsole recht wenig bzw. ist sehr unübersichtlich, hier gibt es die Möglichkeit, die Ausgabe in eine Datei umzuleiten.
Auf der Konsole kann man dieses in der Regel einfach mit einem “> dateiname.txt” machen, jedoch werden hier noch zusätzliche Zeichen eingefügt, welches auf ein fehlerhaftes Encoding zurückzuführen ist.
Das Tool bietet die Möglichkeit Reports in den Formaten TXT, HTML, sowie JSON zu erzeugen. Der TXT Report ist einfach nur die Ausgabe, welche auch in der Konsole ausgegeben wird in einer Datei.
Ich bevorzuge jedoch den HTML Report, dieser ist dynamisch und farbig aufgebaut und dadurch deutlich lesbarer als der Text-Report.
C:\Tools\Workspaces\SampleHelloWorldProject>npm-groovy-lint --output "report.html"
GroovyLint: Successfully processed CodeNarc:
CodeNarc completed: (p1=0; p2=0; p3=1) 114ms
C:\Tools\Workspaces\SampleHelloWorldProject>
Der Report wird dann in dem Verzeichnis abgelegt, in welchem der Befehl ausgeführt wurde. Im Browser wird dann pro Datei mit Auffälligkeiten eine Tabelle angelegt. Wurde für eine Datei nichts gefunden, wird diese auch nicht aufgeführt!
Am Ende der HTML Seite werden zusätzlich die Rules aufgeführt, gegen welche der Code geprüft wird.