用于Kotlin的Detekt静态分析仪

是时候爱上静态分析仪了! 在Kotlin认识Detekt


如果您已经知道将要讨论的内容,并且只对实施项目感兴趣,请直接转到安装点。

这是什么


图片

在没有实际执行所研究程序的情况下执行了软件分析(与动态分析相对)。 维基百科

用您自己的话说,这是一个方便的工具,可帮助您遵守良好代码的规则。 通过错误代码的定义,可以非常灵活地自定义过滤器。 每次启动时将生成一个特定的报告,包括有关检测到的冲突的统计信息,有关它们的信息,从而可以确定发生冲突的位置及其类型。

静态分析器简化了审阅者的工作,并通常节省了开发团队的时间。

假设我们有一个良好的PR,但是作者给变量起的名字太长了,编写了可以轻松简化或违反Detekt配置文件中许多设置规则之一的代码,这些规则并不复杂,但是对PR进行代码审查是行不通的。
作者将再次需要在项目之间以及审稿人之间进行切换,我相信重复审阅不会带来任何乐趣。
如果速度快且不昂贵,则实现自动化。 (C)常识

什么是静态分析仪?


对于Java:


对于Kotlin:


我回答了您脑海中出现的问题,关于Kotlin的Spot-bugs不起作用。

将Detekt引入项目


检测可以通过几种方式安装:

  1. AndroidStudio 插件
  2. 摇篮

我认为通过Gradle进行的配置更加灵活,我在谈论它。

在官方网站上,有几种方法可以在项目中安装Detekt,具体取决于Gradle的版本,无论它是否为Android项目。 但是,以我实现android项目的经验, 某些说明不起作用 。 目前,该项目非常接近1.0版本。 撰写本文时的最新版本为候选版本1.0.0-RC14

这样啊

我们转到Gradle官方网站并查看安装说明。

buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.0-RC14" } } 

我建议对Android项目坚持这一决定。

您可能已经注意到我删除了apply:插件行,因为我建议您将Detekt分离到一个单独的文件中,然后在其中应用apply。

阶段1:


因此,将此代码复制到应用程序级别build.gradle。

在那里,在allprojects块中我们应该写一行以应用包含detekt设置的文件。

 allprojects { apply from: "$rootDir/detekt.gradle" repositories { maven { url "https://plugins.gradle.org/m2/" } } } 

阶段2:


然后,您需要创建detekt.gradle文件

 apply plugin: "io.gitlab.arturbosch.detekt" detekt { toolVersion = "1.0.0-RC14" // Version of the Detekt CLI that will be used. When unspecified the latest detekt version found will be used. Override to stay on the same version. input = files("src/main/java") // The directories where detekt looks for input files. Defaults to `files("src/main/java", "src/main/kotlin")`. parallel = true // Builds the AST in parallel. Rules are always executed in parallel. Can lead to speedups in larger projects. `false` by default. filters = ".*build.*,.*/resources/.*,.*/tmp/.*" // Regular expression of paths that should be excluded separated by `;` or `,`. config = files("$rootDir/detekt-config.yml") // Define the detekt configuration(s) you want to use. Defaults to the default detekt configuration. reports { xml { enabled = true // Enable/Disable XML report (default: true) destination = file("build/reports/detekt.xml") // Path where XML report will be stored (default: `build/reports/detekt/detekt.xml`) } html { enabled = true // Enable/Disable HTML report (default: true) destination = file("build/reports/detekt.html") // Path where HTML report will be stored (default: `build/reports/detekt/detekt.html`) } } } 

阶段3:


现在您需要创建detekt-config.yml配置文件

这是官方网站上的标准配置文件。

阶段4:


打开控制台并运行命令: gradlew detekt

仅此而已!


现在,您已经为项目准备了统计信息。 它们显示在控制台中,您也可以沿着以下路径找到它们:{u_project} \ app \ build \ reports \ detekt

总结


Jenkins中进行构建时使用Detekt非常方便
在具有超过2000个类的项目中,任务执行时间为4-7秒*。

我想说的是,使用静态分析仪可以稍微简化我们的工作。 加快开发过程并节省业务成本。

参考文献:

Detekt的github
设置检测
default-detekt-config.yml

Source: https://habr.com/ru/post/zh-CN442500/


All Articles