有什么工具可以执行Scala代码的静态分析吗?

有什么工具可以执行Scala代码的静态分析,类似于FindBugs和PMD for Java或Splint for C / C ++? 我知道FindBugs在编译Java时产生的字节码上工作,所以我很好奇它是如何在Scala上工作的。

谷歌search(截至2009年10月27日)显示非常less。

谷歌search(截至2010年2月1日)揭示了这个问题。

FindBugs分析JVM字节代码,无论生成它们的工具如何。 我试过使用FindBugs来检查由Scala生成的.class文件。 不幸的是,FindBugs产生了许多警告,即使是Scala程序也是如此。

现在有Scalastyle可以完成Checkstyle为Java所做的工作。 这不仅包括格式化检查,还包括一些检查已知错误的来源,如实现hashCode()的类,但不等于。

目前大约有40个支票,但我们一直在增加。

欲了解更多信息,请访问www.scalastyle.org 。

有一些工作正在朝着这个方向发展。 一些链接:

还有一个关于scala邮件列表的讨论,可以在这里find档案。

以下是截至2014年8月更新的一些针对Scala的目标或工作良好的答案。

就我个人而言,我认为JVM或Java的结果有太多的误报,或者主要针对Java特定的类进行检查。 例如,由于在Scala中我们不倾向于使用Java集合,所以不需要所有基于findbugs集合的检查。 另一个例子是检查在Scala中无关的静态字段的使用。

Findbugs和其他基于字节码的工具将起作用,因为他们会在代码中发现错误。 不幸的是,基于字节码的方法已经根据javac编译器的输出进行了调整,这意味着它们可能会产生非常高的误报率,并且会错过基本的问题,因为Scala将产生与javac编译器不同的成语。

对于开源项目,我对Codacy有很多乐趣(例如https://www.codacy.com/app/hejfelix/Frase/dashboard

有一个用于PMD复制粘贴检测器CPD的SBT插件。

https://github.com/sbt/cpd4sbt

基于AST的斯卡拉复制粘贴检测器。 寻找复制粘贴的子树/ AST,并通知它。

这是sbt的插件。

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

我不太了解Scala,但是如果Java兼容的话,Klocwork的Solo产品也许可以工作。 你可以在这里findKlocwork Solo