Scala是目前最令人激动的语言之一。它提供了函数式和面向对象编程范式的优点。它旨在解决现有语言的诟病,被设计成简洁而又非常强大。事实上,像Spark、Play和Akka这样的框架已经帮助Scala获得了巨大的人气,尤其是在数据工程和网络服务领域。虽然Scala对那些来自Java的人来说略显熟悉,但学习曲线很陡峭,尤其是与Go或Python等其他语言相比。
像Scala这样的语言最强大的方面之一是能够利用编译器插件的优势。编译器插件直接集成到构建过程/工具中,并在某些阶段被调用以发出或显示某些行为。现在有很多工具,包括开源的和专有的,都在利用这一特性。静态分析工具就是这样的一个类别。事实上,几乎所有为Scala编写的静态分析工具都是一个编译器插件。他们会在你的代码库中检测出大约90-100个独特的问题。虽然令人钦佩,但这种做法也带来了一些问题。随着代码库、构建过程和团队规模的增长,让这些工具集成到工作流程中变得很困难--特别是在不同的构建工具中,人们使用他们选择的IDE、代码编辑器和操作系统。
在DeepSource,我们的理念是,开发人员永远不需要担心以正确的方式将这些工具集成。一般来说,判断代码的好坏往往既要看其风格,也要看其逻辑。因此,在DeepSource,我们设计的工具可以直接集成到您选择的VCS和您的开发工作流程中,帮助您解决这些问题。DeepSource建立在社区已经完成的创新之上,使静态分析的结果对你来说更容易获得和操作。我们保证问题中的假阳性率低于5%,帮助你在每次提交和拉动请求上连续运行分析,几乎不需要配置,并使寻找和修复代码中的质量问题的整体体验更加愉快。
因此,我们非常自豪地宣布DeepSource的Scala分析器,测试版已经推出。在这个测试版中,我们目前跟踪了大约50个不同类别的问题,如性能错误、安全风险、错误风险和反模式。
除了其他Scala工具提供的常规静态分析外,我们还提供了上下文分析。我们不是简单地对每一个有问题的做法提出红色警报,而是通过一些额外的检查来确定和设置适当的警告级别。每当我们认为代码的某一部分可以被重构时,我们的分析器就会运行额外的上下文分析来确定最佳的建议(如果有的话)。下一节将讨论我们如何更进一步为你提供更好的个性化建议。
样本问题
- 如果你依靠
is/asInstanceOf[T]来执行与铸型相关的操作,并且如果我们的分析器可以证明类型T在编译时肯定会被清除,作为类型清除的一部分,我们会提出一个关键警告--以示你的代码在这种特定情况下有很大可能会被破坏。
例子--
- Scala有一定的风格/方法来完成事情,就像其他语言一样。如果你使用的方法与Scala通常采取的方法不同,我们的分析器会提出适当的建议,帮助你采用最好的方法如果某个方法可以省略括号,遵循0-arity惯例,因为它没有任何副作用,即状态不发生突变,我们的分析器会为你做出正确的建议。
如何使用Scala分析器?
你可以通过在repo中的.deepsource.toml 文件中添加一个条目到[[analyzers]] 表来开始使用Scala分析器。或者,你可以在使用配置生成器后,从DeepSource版本库仪表板上激活你的Scala repo。
配置样本
version = 1
[[analyzers]]
name = "scala"
enabled = true
在未来几个月(事实上是几周!),我们将扩大分析器的检测能力,进一步减少误报,并将提高分析器的性能--所有这些都是为了让你能够保持生产力,尽可能写出最好的代码。