2009-10-21 5 views
46

Gibt es Werkzeuge zur statischen Analyse von Scala-Code, ähnlich wie FindBugs und PMD für Java oder Splint für C/C++? Ich weiß, dass FindBugs an dem Bytecode arbeitet, der durch das Kompilieren von Java erzeugt wurde, also bin ich neugierig, wie es bei Scala funktionieren würde.Gibt es Werkzeuge zur statischen Analyse von Scala-Code?

Google-Suchen (Stand 27. Oktober 2009) zeigen sehr wenig.

Google-Suchen (Stand 01. Februar 2010) decken diese Frage auf.

+1

Welche Art von Fehler, über die, die der Compiler bereits sucht? –

+1

Nicht wirklich - was Compiler finden kann kann ich auch leicht finden. Was ich suche, ist "toter Code", unnötige initialisierte Variablen, etc. Für mehr statische Analyse werfen Sie einen Blick auf http://findbugs.sourceforge.net/ –

+1

Viel Glück bei Ihrer Suche, aber Analysatoren der Art von FindBugs stellen eine Menge Arbeit dar und Scala ist vielleicht noch zu jung, um eine Sprache zu haben. –

Antwort

20

FindBugs analysiert JVM Byte-Codes, unabhängig von dem Tool, das sie generiert. Ich habe versucht, FindBugs zu verwenden, um von Scala erzeugte .class-Dateien zu überprüfen. Leider haben FindBugs viele Warnungen ausgegeben, sogar für triviale Scala-Programme.

+1

Es ist nicht wirklich geeignet für Scala wegen der Konzentration auf Java SDK-spezifische Dinge, obwohl mit der massiven Menge an Fehlalarmen (alle in IMO) – monkjack

-2

Ich weiß nicht viel über Scala, aber wenn Java kompatibel ist, könnte das Solo-Produkt von Klocwork funktionieren. Sie können es hier finden Klocwork Solo

+2

Warum ist das die akzeptierte Antwort? Ich kann keinen Beweis finden, dass Klocwork die Probleme, die Sie Findbugs laufen haben, "löst" ...? – p3t0r

7

Findbugs und andere Tools, die auf Bytecode basieren, funktionieren in dem Sinne, dass sie Fehler in Ihrem Code finden. Leider sind die Bytecode-basierten Ansätze gegen die Ausgabe der Javac-Compiler abgestimmt worden, was bedeutet, dass sie wahrscheinlich sehr hohe False-Positive-Raten erzeugen und grundlegende Probleme vermissen, da Scala verschiedene Idiome produzieren wird als der Javac-Compiler.

17

Es gibt jetzt Scalastyle, die den Job erledigt, den Checkstyle für Java leistet. Dies umfasst nicht nur Formatierungsprüfungen, sondern auch einige Prüfungen auf bekannte Fehlerquellen, z. B. eine Klasse, die hashCode() implementiert, aber nicht gleich.

Derzeit gibt es etwa 40 Prüfungen, aber wir fügen sie die ganze Zeit hinzu.

Weitere Informationen finden Sie unter www.scalastyle.org.

8

ist eine aktualisierte Antwort ab August 2014 für einige, die zum Ziel haben oder arbeiten gut mit Scala.

Persönlich denke ich, dass die JVM oder Java am Ende mit viel zu viele falsche Positive enden, oder Inspektionen haben, die hauptsächlich auf Java spezifische Klassen gerichtet sind. Da wir beispielsweise in Scala nicht dazu neigen, die Java-Sammlungen zu verwenden, werden alle auf der Findbugs-Sammlung basierenden Prüfungen nicht benötigt. Ein anderes Beispiel sind die Inspektionen zur Verwendung statischer Felder, die in Scala irrelevant sind.

1

scala Paste Detektor zu kopieren, auf Basis von AST. Suchen Sie nach kopierten Unterbäumen/ASTs und informieren Sie darüber.

Es ist Plugin für sbt.

https://github.com/ajtkulov/scala-cpd

Verwandte Themen