自定义 Android 仅适用于 kotlin 的 Lint(无 java)

Custom Android Lint for kotlin only (no java)

我决定为 Android 编写自定义 lint 检查并且我坚信 Android Lint,所以我不想使用 detektktlint 用于检查代码(他们无法解析 xml 文件等,我想使用一个工具)。

但是当我阅读 Android Lint 的文档时,我发现他们有这个新的 UASTPSIcom.intellij.psi 包)东西,当 detekt 使用它的 child(仅 kotlin org.jetbrains.kotlin.psi)。

我的项目中没有 java 代码,我想编写特定于 kotlin 的 lint 规则。

我明白了,com.android.tools.lint.detector.api.Detector 有一个方法 createPsiVisitor returns JavaElementVisitor,而这个 JavaElementVisitor 是 class 的子 class =23=]。有没有可能改用 org.jetbrains.kotlin.psi.KtVisitor

或者如何在 Detector.UastScanner 中编写 kotlin 特定检查?

我想(例如)为

编写规则

Kotlin hidden costs set of articles (1, 2, 3)

P.S。我在 detekt 中成功地做到了这一点,但我想使用默认的 Android Lint。

[更新] 我找到了 com.android.tools.lint.checks.InteroperabilityDetector。可能可以写成 KotlinVisitor(在 class 中写成 JavaVisitor)。这个 KotlinVisitor 将只是 KtVisitor 的包装?

在 3.4 版中,Kotlin PSI 可直接用于自定义 lint 检查(位于类路径中)。当你拿到一个 UFile(Java 和 Kotlin AST 之上的 UAST 抽象)时,它有一个 sourcePsi 字段,它给你 KtFile。

有一个 "lint-dev" Google 小组,您可以 read/join 更详细地讨论 lint 检查开发。