介绍一下DeepSource的Scala分析器

267 阅读5分钟

Scala是目前最令人激动的语言之一。它提供了函数式和面向对象编程范式的优点。它旨在解决现有语言的诟病,被设计成简洁而又非常强大。事实上,像Spark、Play和Akka这样的框架已经帮助Scala获得了巨大的人气,尤其是在数据工程和网络服务领域。虽然Scala对于那些来自Java的人来说略显熟悉,但学习曲线很陡峭,尤其是与Go或Python等其他语言相比。

像Scala这样的语言最强大的方面之一是能够利用编译器插件的优势。编译器插件直接集成到构建过程/工具中,并在某些阶段被调用以发出或显示某些行为。现在有很多工具,包括开源的和专有的,都在利用这一特性。其中一个类别是静态分析工具。事实上,几乎所有为Scala编写的静态分析工具都是一个编译器插件。他们会在你的代码库中检测出大约90-100个独特的问题。虽然令人钦佩,但这种做法也带来了一些问题。随着代码库、构建过程和团队规模的增长,让这些工具集成到工作流程中变得很困难--特别是在不同的构建工具中,人们使用他们选择的IDE、代码编辑器和操作系统。

在DeepSource,我们的理念是,开发人员永远不需要担心以正确的方式将这些工具集成。一般来说,判断代码的好坏往往既要看其风格,也要看其逻辑。因此,在DeepSource,我们设计的工具可以直接集成到您选择的VCS和您的开发工作流程中,帮助您解决这些问题。DeepSource建立在社区已经完成的创新之上,使静态分析的结果对你来说更容易获得和操作。我们保证问题中的假阳性率低于5%,帮助你在每次提交和拉动请求时连续运行分析,几乎不需要配置,并使寻找和修复代码中的质量问题的整体体验更加愉快。

因此,我们非常自豪地宣布DeepSource的Scala分析器,测试版已经推出。在这个测试版中,我们目前跟踪了大约50个不同类别的问题,如性能错误、安全风险、错误风险和反模式。

除了其他Scala工具提供的常规静态分析外,我们还提供了上下文分析。我们不是简单地对每一个有问题的做法提出红色警报,而是通过一些额外的检查来确定和设置适当的警告级别。每当我们认为代码的某一部分可以被重构时,我们的分析器就会运行额外的上下文分析来确定最佳的建议(如果有的话)。下一节将讨论我们如何更进一步为你提供更好的个性化建议。

样本问题

  1. 如果你依靠is/asInstanceOf[T] 来执行与铸型相关的操作,并且如果我们的分析器可以证明类型T 在编译时肯定会被清除,作为类型清除的一部分,我们会提出一个关键警告--以示你的代码在该特定情况下有很大的可能会被破坏。

例子--

// Problematic `if`
if (items.isInstanceOf[List[Int]]) {
  // do something with list of integers
}
  1. Scala有一定的风格/方法来完成事情,就像其他语言一样。如果你使用的方法与Scala通常采取的方法不同,我们的分析器会提出适当的建议,帮助你采用最好的方法如果某个方法可以省略括号,遵循0-arity惯例,因为它没有任何副作用,即状态不发生突变,我们的分析器会为你做出正确的建议。
class Person {
  // ...
  //
  // This method can be refactored accordingly
  def getIntro(): String = {
    s"Hi! My name is ${this.name}! I work in the Scala team at DeepSource."
  }
}

println(pawan.getIntro())   // works
println(pawan.getIntro)     // parentheses dropped, suggests that this is a pure function and has no side effects

如何使用Scala分析器?

你可以通过在repo中的.deepsource.toml 文件中添加一个条目到[[analyzers]] 表来开始使用Scala分析器。或者,你可以在使用配置生成器后,从DeepSource版本库仪表板上激活你的Scala repo。

配置样本

version = 1

[[analyzers]]
name = "scala"
enabled = true

在未来几个月(事实上是几周!),我们将扩大分析器的检测能力,进一步减少误报,并将提高分析器的性能--所有这些都是为了让你能够保持生产力,尽可能地写出最好的代码。我们还将推出对Autofix的支持--这样,你只需点击一下就可以对你的代码进行修复。

我们将继续进行更多的改进,以帮助为您提供尽可能好的建议。请试一试,并在Twitter上告诉我们你的想法。如果你有任何问题,你可以随时在讨论论坛或DeepSource用户组中与我们联系。DeepSource Scala分析器保证假阳性率低于5%。如果你在分析器检测到的问题中发现了假阳性,请一定要报告。我们会在接下来的72小时内解决它。