静态代码分析器排名前10的Java Linter


Linter 最好被描述为静态代码分析器,因为它们甚至在您的代码运行之前检查您的代码。如果您想确保代码的长期可维护性,您应该遵循最佳编码实践和风格指南规则。实现这一目标的最佳方法之一是使用 linter,同时也可能发现代码中的错误和其他问题。
它们可以在您的 IDE 中工作,作为构建过程的一部分运行,或者插入到您的工作流程之间的任何位置。虽然 linter 的用例可能多种多样,但它们的效用通常侧重于代码清理和标准化。换句话说,使用 linter 有助于使您的代码不那么草率且更易于维护。
在本文中,我将研究 10 种最适合 Java 的 linter。您会发现,虽然大多数 linter 并不比其他的“更好”或“更差”,但肯定有一些具有更广泛的功能,使它们比某些小众同类产品更强大或更灵活。
 
 
1. Checkstyle
Checkstyle 是最流行的linter工具之一。这种流行带来了定期更新、详尽的文档和充足的社区支持。Checkstyle 与Ant和 CLI 一起使用。它也可用作各种 IDE 和工具集的插件,包括 Eclipse、Codacy、Maven 和 Gradle——尽管这些插件由第三方管理,因此不能保证长期支持。
Checkstyle 附带支持 Sun 代码约定和 Google Java 样式的预制配置文件,但由于这些文件是XML,因此它们具有高度可配置性以支持您的工作流程和生产需求。
还值得一提的是,即使存在小错误,在其构建过程中内置了 Checkstyle 的项目也将无法构建。如果您只想捕获更大的错误并且没有资源来修复没有明显影响的微小错误,这可能是一个问题。
VsCode 插件下载206,897
 
2. Lightrun
它位于此列表的第二个成员实际上并不是 linter 本身,但它会帮助您提高代码质量并在错误成为严重问题之前防止错误。到目前为止,一切都是静态代码分析器,而Lightrun 是运行时调试器。归根结底,静态代码分析和 linting 只能让您到此为止,所以如果您需要更多,Lightrun 值得添加到您的工作流程中。
生产是任何代码库的终极压力测试,尤其是在云计算时代。Lightrun 允许您直接从 IDE 或 CLI 将日志、指标和快照插入到代码中,甚至在运行时也是如此。Lightrun 可让您调试生产中的问题并对代码运行数据分析,而不会减慢或中断您的应用程序。
 
3. PMD
PMD 的首字母代表什么?好像连开发者都不知道……
与 Checkstyle 一样,PMD 是一种流行的静态代码分析器。与 Checkstyle 重点是 Java不同,PMD 支持多语言分析,包括 JavaScript、Salesforce.com、Apex 和 Visualforce。如果您想对前端和后端代码库使用单个 linter,这可能会有所帮助。
 
4. Uncrustify
Uncrustify 与之前的 linter 不同,因为 Java 不是它的主要关注点。相反,它是为 C 和类 C 语言(包括 Java)制作的“代码美化器”。一方面,Uncrustify 非常适合基于 C 或 C 类模拟的工作流程的项目。另一方面,它的特性列表开始和结束只是让你的代码看起来更好。
Uncrustify 通过运行您的代码并自动更新其空白、括号和其他格式约定来匹配规则集。因为这是一个自动化的过程,开发人员自己警告不要在整个项目上运行 Uncrustify,而不要事后检查更改
Uncrustify 最好与其他 linter 和开发工具结合使用。它本身并不是特别强大,但对于涉及多种基于 C 的语言的利基工作流可能会派上用场。
 
5. Error Prone
Error Prone 是代码构建的错误查找器,专为 Java 构建。它旨在补充编译器的静态类型检查器,并在不运行代码的情况下发现潜在的运行时错误。
对于编译和运行过程可能会延长到数小时甚至数天的代码库,进行额外检查可以节省大量时间和麻烦,特别是如果特定错误可能位于不常访问的代码块中。
 
6. Tattletale
Tattletale 不仅会识别 JAR 文件中的不同依赖项,还会找出重复的 JAR 文件,查找重复或缺失的类,并检查具有不同版本号的类似 JAR。从长远来看,这不仅会使您的项目规模更小,而且还有助于防止出现令人头疼的错误,因为您正在调用同一包的两个不同版本,并因版本之间的更改而获得不同的结果。所有这些信息都被放入一个 HTML 报告中,以便于查看。
由于此工具的高级意图,它对逐行代码编辑没有太大帮助。但话虽如此,如果您运行的是纯 Java 代码库,那么 Tattletale 是值得添加到您的武器库中的工具。
 
7. UCDetector
UCDetector 是Unnecessary Code Detector 的缩写,正如它的名字所暗示的那样。除了查找“死”代码之外,它还标记了可以将其隐私修饰符更改public为更受限制的内容的类以及可以设置为 的方法或字段final。
在您的代码完成并调试后,通过 UCDetector 将帮助您捕获您错过或错误地设置为错误的隐私修饰符的任何代码块,这可能会为您省去麻烦,并防止敏感的字段成员无意中暴露给客户。
  
8. Scala 的 linter
一个很好的起点是这个工具集,简单地标题为:linter Compiler Plugin。根据 Github 页面,“Linter 是一个 Scala 静态分析编译器插件,它为各种可能的错误、低效率和样式问题添加了编译时检查。” 它不仅是为 Scala 编写的,而且几乎完全是用 Scala 编写的。
不幸的是,该项目的最后一次提交是在 2016 年,因此它可能无法为过去五年中引入该语言的任何新功能做好准备。
 
9. Scala 风格
Scalastyle 的开发人员这样描述它:“Scalastyle 检查您的 Scala 代码并指出它的潜在问题。如果您遇到过 Checkstyle for Java,那么您就会很好地了解什么是 Scalastyle。除了它显然是针对 Scala 的。”
所以对于那些喜欢 Checkstyle 但正在转向 Scala 工作流程的人来说,欢欣鼓舞,因为 Scalastyle 就在这里。它保持最新状态,并且更可能是比上面 Scala 的 linter 更好的选择。
  
10. COALA
在此列表中的所有 linter 中,Coala 似乎以最大的灵活性为目标。它声称它的工作原理是“为所有语言整理和修复代码”。虽然 Fortran 在他们支持的语言列表中没有任何位置,但 Coala 确实支持相当广泛的列表,包括(当然)Java。
所有这些语言都可以使用单个配置文件进行 lint,因此如果您在多语言 Web 环境中工作(是否还有其他类型的 Web 环境?),您会发现 Coala 非常适合您的需求。