自定义 Lint 规则 - JavaScanner @Deprecated

Custom Lint Rules - JavaScanner @Deprecated

我想为我的公司 android 项目编写一些自定义 lint 规则。我正在阅读一些教程并成功创建了示例规则。

问题是我使用的是 @Deprecated JavaScanner API。我正在阅读官方 google 文档 located here 但它不是最新的。 我试图深入研究现有规则,发现 this google git repository 但它也使用已弃用的 APIs。所以我的问题是

1) 有没有最新的文档,但我就是找不到?

2) 是否有 git 可用的当前 lint 规则存储库?所以我可以分析一下吗?

谢谢!

好的,我已经找到 Java扫描仪的替代品。它没有回答我在下面问过的 2 个问题,但它解决了弃用界面问题,所以我决定 post 一个答案。

根据此 google 组 - API 自 JavaScanner.

以来更改了两次

第一个更改是 JavaPsiScanner 但他们 "didn't advertise this widely, since I already knew that we wanted to switch over to UAST (which was still in development)"

第二个也是最后一个更改是 UastScanner。所以现在应该将它用于 Java 类.

你甚至可以找到 Tor Norbye 写的简短 documentation(上面的第 7 条评论)

编辑: Sample UastDetector class

在 Android 项目中实施自定义规则的一种简单方法是使用基于正则表达式的 linting 工具 AnyLint. It's written in Swift though and therefore it only works on macOS and Linux at the moment (Windows support is in the works)。但是您并不需要 Swift 知识来使用它,只需按照它的文档操作即可。

这是实现任何语言的自定义规则的最简单和最快的方法,基本上支持示例验证甚至自动更正.

例如,您可以编写自定义规则来防止出现多个空行(支持自动更正):

#!/usr/local/bin/swift-sh
import AnyLint // @Flinesoft ~> 0.6.0
try Lint.logSummaryAndExit(arguments: CommandLine.arguments) {
    // MARK: - Variables
    let kotlinFiles: Regex = #"^app/src/main/kotlin/.*\.kt$"#
    let javaFiles: Regex = #"^app/src/main/java/.*\.java$"#
    let xmlFiles: Regex = #"^app/src/main/res/.*\.xml$"#
    let gradleFiles: Regex = #"^.*\.gradle$"#

    // MARK: MultilineWhitespaces
    try Lint.checkFileContents(
        checkInfo: "MultilineWhitespaces: Restrict whitespace lines to a maximum of one.",
        regex: #"\n( *\n){2,}"#,
        matchingExamples: ["}\n    \n     \n\nclass", "}\n\n\nvoid"],
        nonMatchingExamples: ["}\n    \n    class"],
        includeFilters: [kotlinFiles, javaFiles, xmlFiles, gradleFiles],
        autoCorrectReplacement: "\n\n",
        autoCorrectExamples: [
            ["before": "}\n    \n     \n\n    class", "after": "}\n\n    class"],
            ["before": "}\n\n\nvoid", "after": "}\n\nvoid"],
        ]
    )
}

希望对您有所帮助。