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

Rom*_*gan 46 testing functional-programming static-analysis scala

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

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

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

Chr*_*son 20

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


Mat*_*ell 17

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

目前大约有40个支票,但我们一直在添加它们.

有关更多信息,请访问www.scalastyle.org.


fol*_*one 16

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

还有关于scala邮件列表的讨论,此处提供存档.


mon*_*ack 8

以下是截至2014年8月的一些更新答案,其中包含针对Scala的目标或工作情况.

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


Mic*_*hue 7

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