Statyczna analiza kodu dla języka Scala w SBT - część 2.
Jest to kontynuacja posta Statyczna analiza kodu dla języka Scala w SBT - część 1.
Wtyczki nie modyfikujące kodu źródłowego.
Jest to o wiele większy zestaw wtyczek niż poprzednio.
Scalastyle - Scala style checker
Dodajemy Scalastyle
do pliku project/plugins.sbt
:
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
Generujemy domyślny plik konfiguracyjny scalastyle-config.xml
zawierający reguły:
sbt scalastyleGenerateConfig
Wchodzimy do pliku scalastyle-config.xml
i zmieniamy poziomy z warning
na error
.
Następnie wyłączamy sprawdzanie nagłówka:
<check level="error" class="org.scalastyle.file.HeaderMatchesChecker" enabled="false"/>
A na końcu poprawiamy formatowanie dwuliniowej instrukcji if
:
<check level="error" class="org.scalastyle.scalariform.IfBraceChecker" enabled="true">
<parameters>
<parameter name="singleLineAllowed"><![CDATA[true]]></parameter>
<parameter name="doubleLineAllowed"><![CDATA[true]]></parameter>
</parameters>
</check>
Teraz analizujemy kod i testy za pomocą polecenia:
sbt scalastyle test:scalastyle it:scalastyle
Pełna lista reguł jest dostępna pod linkiem rules-1.0.0.
Dla mnie najważniejszą funkcjonalnością jest liczenie złożoności cyklomatycznej:
<check level="error" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" enabled="true">
<parameters>
<parameter name="maximum"><![CDATA[2]]></parameter>
</parameters>
</check>
WartRemover: a flexible scala linter
WartRemover jest to wtyczka do usuwania brodawek z kodu. Przez brodawkę autor rozumie brzydkie rzeczy, które można napisać w języku Scala, bo składnia języka jest zbyt liberalna. Nazwa wtyczki jest trochę na wyrost, ponieważ w tej chwili WartRemover
pozwala tylko odnaleźć brodawki, a usunąć musimy je sami.
Dodajemy wartremover
do pliku project/plugins.sbt
:
addSbtPlugin("org.wartremover" % "sbt-wartremover" % "2.3.7")
W pliku build.sbt
włączamy wartremover
:
wartremoverErrors ++= Warts.unsafe
Od teraz przy każdej kompilacji będą poszukiwane brodawki. Pełna lista brodawkek
Scapegoat - Scala compiler plugin for static code analysis
Scapegoat to linter dla języka Scala.
Dodajemy scapegoat
do pliku project/plugins.sbt
:
addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "1.3.8")
Ustawiamy wersję scapegoat
w build.sbt
:
scapegoatVersion := "1.1.0"
Analizujemy kod za pomocą polecenia:
sbt scapegoat
Linter - Static Analysis Compiler Plugin for Scala
Linter to niestety nie rozwijany już linter.
Dodajemy Linter
do pliku project/plugins.sbt
:
addCompilerPlugin("org.psywerx.hairyfotr" %% "linter" % "0.1.17")
Linter uruchamia się automatycznie podczas kompilacji.
Scala clippy - Good advice for Scala compiler errors
Scala clippy to wtyczka dodająca porady jak poprawić błędy kompilacji.
Dodajemy clippy
do pliku project/plugins.sbt
:
addSbtPlugin("com.softwaremill.clippy" % "plugin-sbt" % "0.5.3")
sbt-cpd - Copy & Paste Detector plugin using PMD for sbt.
sbt-cpd to wtyczka do wykrywania duplikatów kodu za pomocą Copy/Paste Detector (CPD) z projektu PMD.
Dodajemy sbt-cpd
do pliku project/plugins.sbt
:
addSbtPlugin("com.github.sbt" % "sbt-cpd" % "2.0.0")
I analizujemy kod za pomocą polecenia:
sbt cpd
stats - An sbt plugin for source code statistics
sbt-stats to wtyczka licząca ilość plików, linii i znaków w projekcie.
Dodajemy stats
do pliku project/plugins.sbt
:
addSbtPlugin("com.orrsella" % "sbt-stats" % "1.0.7")
Analizujemy kod za pomocą polecenia:
sbt stats
Podsumowanie
Wszystkie wymienione wyżej wtyczki dodałem do projektu resentiment
Moje polecenie generowania raportów wygląda następująco:
sbt scalastyle test:scalastyle it:scalastyle && \
sbt scapegoat && \
sbt cpd && \
sbt stats
Niestety, ponieważ używam metody println
w klasie Core
, muszę obniżyć poziom raportowania błędów dla reguły org.scalastyle.file.RegexChecker
w ScalaStyle
z error
na warning
.
Zostaw komentarz