我想将ktlint使用的样式添加到Android Studio中,以便在我自己格式化时使用ktlint样式。

根据文档,我安装了ktlint CLI

brew install ktlint

然后,我导航到项目的根目录并执行
ktlint --android applyToIDEAProject

现在,该样式显示在我的使用偏好中。

问题是通过CLI所应用的样式使用的是我认为是ktlint的最新版本,因为我的手动格式与Gradle任务的格式不同。我希望它使用Gradle插件中的样式,以便将样式应用于项目与Gradle任务在格式化时使用的相同。

最后,我希望这是一项Gradle任务,以便其他开发人员可以导入和应用与创建钩子(Hook)相同的样式。

以下是我的“ktlint” Gradle文件
dependencies {
    ktlint "com.pinterest:ktlint:0.34.2"
}


task ktlint(type: JavaExec, group: "verification") {
    description = "Check Kotlin code style."
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "src/**/*.kt"
}

check.dependsOn ktlint

task ktlintFormat(type: JavaExec, group: "formatting") {
    description = "Fix Kotlin code style deviations."
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "-F", "src/**/*.kt"
}

更新1

我查看了可用的Gradle插件之一,并看到了该文件。对我来说,它看起来像是主库的包装器,因此必须能够不使用第三方插件。 https://github.com/JLLeitschuh/ktlint-gradle/blob/master/plugin/src/main/kotlin/org/jlleitschuh/gradle/ktlint/KtlintApplyToIdeaTask.kt

我正在使用的版本是0.34.2,并将其与最新版本进行比较,看来稍后添加了对这些命令的支持,如此处https://github.com/pinterest/ktlint/blob/master/ktlint/src/main/kotlin/com/pinterest/ktlint/Main.kt#L49所示。

从此信息中,我添加了此Gradle任务,该任务使我前进但仍然失败。
task addKtLintStyle(type: JavaExec, group: "formatting") {
    description = "yep"
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "--android", "applyToIDEA"
}

失败并显示此错误
.idea directory not found. Are you sure you are inside project root directory?

扔在这里

https://github.com/pinterest/ktlint/blob/master/ktlint/src/main/kotlin/com/pinterest/ktlint/internal/ApplyToIDEACommandHelper.kt#L27

我的gradle文件位于我的项目的根目录中,因此我不确定此时该做什么。

最佳答案

我设法使它起作用。这是最终的任务定义

task addKtLintStyle(type: JavaExec, group: "formatting") {
    description = "Adds The KtLint Style To Your IDE"
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "--android", "applyToIDEA", "-y"
    //Point to the root directory because this task needs access to the .idea directory
    workingDir(getRootDir())
}

注意行
    //Point to the root directory because this task needs access to the .idea directory
    workingDir(getRootDir())

并且
    args "--android", "applyToIDEA", "-y"
-y仅接受应用的样式。

重新启动Android Studio后,我可以看到ktlint样式

10-08 14:52