【问题标题】:Are there any tools for performing static analysis of Scala code? [closed]是否有任何工具可以对 Scala 代码进行静态分析? [关闭]
【发布时间】:2010-12-08 14:31:46
【问题描述】:

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

Google 搜索(截至 2009 年 10 月 27 日)显示的信息很少。

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

【问题讨论】:

  • 除了编译器已经在寻找的错误之外,还有哪些错误?
  • 不是真的——编译器能找到什么我也很容易找到。我正在寻找的是“死代码”、不必要的初始化变量等。有关更多静态分析,请查看findbugs.sourceforge.net
  • 祝您搜索顺利,但 FindBug 之类的分析器需要大量工作,而 Scala 可能还太年轻,还没有。
  • @Pascal - Scala 于 2003 年首次发布:它已经 6 岁了!
  • @Pascal FindBugs 在 JVM 字节码级别工作,因此它也应该适用于 Scala。

标签: testing scala functional-programming static-analysis


【解决方案1】:

我对 Scala 了解不多,但如果与 Java 兼容,Klocwork 的 Solo 产品可能会起作用。你可以在这里找到它Klocwork Solo

【讨论】:

  • 为什么这是公认的答案?我找不到任何证据表明 Klocwork “解决”了您在运行 Findbugs 时遇到的问题...?
【解决方案2】:

FindBugs 会分析 JVM 字节码,而不管生成它们的工具是什么。我尝试使用 FindBugs 来检查 Scala 生成的 .class 文件。不幸的是,FindBugs 产生了许多警告,即使是对于微不足道的 Scala 程序也是如此。

【讨论】:

  • 它并不真正适合 Scala,因为它专注于 Java SDK 特定的东西,尽管有大量的误报(全部在 IMO)
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    在这个方向上正在进行一些工作。一些链接:

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

    【讨论】:

      【解决方案5】:

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

      目前大约有 40 项检查,但我们一直在添加它们。

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

      【讨论】:

        【解决方案6】:

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

        https://github.com/sbt/cpd4sbt

        【讨论】:

          【解决方案7】:

          这是截至 2014 年 8 月的更新答案,适用于一些针对 Scala 或与 Scala 配合良好的用户。

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

          【讨论】:

            【解决方案8】:

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

            它是 sbt 的插件。

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

            【讨论】:

              【解决方案9】:

              我在 Codacy(例如 https://www.codacy.com/app/hejfelix/Frase/dashboard)的开源项目中获得了很多乐趣

              【讨论】:

                猜你喜欢
                • 2023-03-14
                • 1970-01-01
                • 1970-01-01
                • 2010-09-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-11-20
                • 2010-10-06
                相关资源
                最近更新 更多