首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在kotlin中为ktlint编写自定义规则?

如何在kotlin中为ktlint编写自定义规则?
EN

Stack Overflow用户
提问于 2019-07-01 22:52:27
回答 1查看 1.2K关注 0票数 0

我一直在尝试为ktlint编写自定义规则。当我尝试通过终端执行我的自定义规则时,我没有得到任何错误,ktlint的标准规则被执行,但我的自定义规则被忽略。也许有人知道我错过了什么?

我的build.gradle:

代码语言:javascript
复制
plugins {
id 'java-library'
id 'org.jetbrains.kotlin.jvm' version '1.3.40'
id 'maven'
}

group 'com.xxx'

repositories {
    mavenCentral()
    jcenter()
}

configurations {
    ktlint
}


dependencies {
    compileOnly "com.pinterest.ktlint:ktlint-core:0.32.0"
    testCompile "junit:junit:4.12"
    testCompile "org.assertj:assertj-core:3.10.0"
    testCompile "com.pinterest.ktlint:ktlint-core:0.32.0"
    testCompile "com.pinterest.ktlint:ktlint-test:0.32.0"
}

task ktlint(type: JavaExec, dependsOn: classes) {
    main = 'com.pinterest.ktlint.Main'
    // adding compiled classes to the classpath so that ktlint would validate project's sources
    // using its own ruleset (in other words to dogfood)
    classpath = configurations.ktlint + sourceSets.main.output
    args '--debug', 'src/**/*.kt'
}

check.dependsOn ktlint

我的自定义规则类(出于测试目的,它应该总是发出一个lint错误):

代码语言:javascript
复制
package com.xxx.ktlint

import com.pinterest.ktlint.core.Rule
import org.jetbrains.kotlin.com.intellij.lang.ASTNode

class TempRule : Rule("no-var") {

    override fun visit(
        node: ASTNode,
        autoCorrect: Boolean,
        emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit
    ) {
        emit(node.startOffset, "#### TEST: KTLINT ERROR", false)
    }
}

我的com.pinterest.ktlint.core.RuleSetProvider

代码语言:javascript
复制
com.xxx.ktlint.CustomRuleSetProvider

我通过执行gradle任务" jar“创建jar,然后在终端中像这样执行ktlint:

代码语言:javascript
复制
ktlint -R ../path/to/ktlint-rules.jar "path/to/file/**/file-to-be-checked.kt"

我没有得到任何错误,ktlint应用于应该检查所有标准规则的文件,但我的自定义规则被忽略了。jar文件本身似乎不会被忽略,因为当我在命令中放入一个不存在的名称时,我会得到一个错误。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 17:07:16

问题是我已经在本地安装了0.31.0版本的ktlint (在pinterest接管代码之前),并且在我的build.gradle中我使用的是0.33.0 (在ptinerest接管代码之后)。因为很多包都被重命名了,所以不同的版本不能很好地相处。在将我的本地ktlint更新到0.33.0版本之后,可以按预期应用自定义规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56837833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档