自定义 Android 仅适用于 kotlin 的 Lint(无 java)
Custom Android Lint for kotlin only (no java)
我决定为 Android 编写自定义 lint 检查并且我坚信 Android Lint,所以我不想使用 detekt
或 ktlint
用于检查代码(他们无法解析 xml 文件等,我想使用一个工具)。
但是当我阅读 Android Lint 的文档时,我发现他们有这个新的 UAST
和 PSI
(com.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 特定检查?
我想(例如)为
编写规则
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 检查开发。
我决定为 Android 编写自定义 lint 检查并且我坚信 Android Lint,所以我不想使用 detekt
或 ktlint
用于检查代码(他们无法解析 xml 文件等,我想使用一个工具)。
但是当我阅读 Android Lint 的文档时,我发现他们有这个新的 UAST
和 PSI
(com.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 特定检查?
我想(例如)为
编写规则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 检查开发。