是否有用于执行Scala代码静态分析的工具,类似于FindBugs和PMD for Java或Splint for C / C ++?我知道FindBugs可以处理编译Java所产生的字节码,所以我很好奇它是如何在Scala上运行的。
谷歌搜索(截至2009年10月27日)显示的很少。
谷歌搜索(截至2010年2月1日)揭示了这个问题。
答案 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插件。
答案 7 :(得分:1)
答案 8 :(得分:-2)
我对Scala了解不多,但如果与Java兼容,Klocwork的Solo产品可能会有效。你可以在Klocwork Solo
找到它