是否有任何工具可用于执行Scala代码的静态分析?

时间:2009-10-21 05:28:33

标签: testing scala functional-programming static-analysis

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

谷歌搜索(截至2009年10月27日)显示的很少。

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

9 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:17)

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

目前大约有40张支票,但我们会一直添加它们。

有关详细信息,请参阅www.scalastyle.org

答案 2 :(得分:16)

这方面正在进行一些工作。一些链接:

还有关于scala邮件列表的讨论,可用存档here

答案 3 :(得分:8)

以下是截至2014年8月的一些更新答案,其中一些针对Scala的目标或效果很好。

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

答案 4 :(得分:7)

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

答案 5 :(得分:3)

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

答案 6 :(得分:1)

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

https://github.com/sbt/cpd4sbt

答案 7 :(得分:1)

scala复制粘贴检测器,基于AST。寻找复制粘贴的子树/ AST,并告知它。

这是sbt的插件。

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

答案 8 :(得分:-2)

我对Scala了解不多,但如果与Java兼容,Klocwork的Solo产品可能会有效。你可以在Klocwork Solo

找到它