自定义Lint规则 - JavaScanner @Deprecated

时间:2017-12-15 22:27:32

标签: java android google-api lint android-lint

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

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

1)有没有最新的文档,但我根本找不到它?

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

谢谢!

2 个答案:

答案 0 :(得分:1)

好的,我已经找到了JavaScanner的替代品。它并不是我在下面提出的两个问题,但它解决了弃用界面问题所以我决定发布一个答案。

根据这个谷歌群组 - 自 JavaScanner 以来API已更改两次。

第一次更改是 JavaPsiScanner 但是他们 "没有广泛宣传,因为我已经知道我们想要切换到UAST(它仍在开发中)"

第二次也是最后一次更改是 UastScanner。因此,现在应该将它用于Java类。

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

修改: Sample UastDetector class

答案 1 :(得分:0)

在Android项目中实现自定义规则的一种简单方法是使用基于Regex的整理工具AnyLint。它是用Swift编写的,因此目前仅在macOS和Linux上可用(Windows支持为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"],
        ]
    )
}

我希望这会有所帮助。