Project Icon

kotlinter-gradle

Kotlin代码格式化与检查的Gradle插件

kotlinter-gradle是基于ktlint引擎的Gradle插件,用于Kotlin源文件的代码格式化和检查。该插件支持零配置集成,兼容多种Kotlin Gradle插件,可处理.kt和.kts文件。通过Gradle增量构建和Worker API实现并行处理,提高效率。此外,它还提供自定义任务和Git钩子等功能,有助于提升Kotlin项目的代码质量。

Kotlinter Gradle

构建状态 最新版本

这是一个无痛的Gradle插件,用于使用出色的ktlint引擎对Kotlin源文件进行lint检查和格式化。

它旨在易于设置,无需任何配置,并且开箱即用的行为符合预期。

它还很快,因为它直接将ktlint引擎与Gradle的增量构建集成,并使用Worker API并行化工作。

安装

可在Gradle插件门户获取:https://plugins.gradle.org/plugin/org.jmailen.kotlinter

单模块

Kotlin
plugins {
    id("org.jmailen.kotlinter") version "4.4.1"
}
Groovy
plugins {
    id "org.jmailen.kotlinter" version "4.4.1"
}

多模块和Android

Kotlin 根目录 `build.gradle.kts`
plugins {
    id("org.jmailen.kotlinter") version "4.4.1" apply false
}

每个包含Kotlin源代码的模块的 build.gradle.kts

plugins {
    id("org.jmailen.kotlinter")
}
Groovy 根目录 `build.gradle`
plugins {
    id 'org.jmailen.kotlinter' version "4.4.1" apply false
}

每个包含Kotlin源代码的模块的 build.gradle

plugins {
    id 'org.jmailen.kotlinter'
}

兼容性

kotlinter版本最低kotlin版本最高kotlin版本最低gradle版本
4.2.0+1.9.20-8.4
4.0.0+1.9.0-7.6
3.14.0+1.8.01.8.227.6
3.11.0+1.7.01.7.227.0
3.10.0+1.6.201.6.217.0
3.7.0+1.5.311.6.107.0
3.5.0+1.5.01.5.306.8
3.0.0+1.4.01.4.306.8
2.0.0+1.3.01.3.30-

特性

  • 支持Kotlin Gradle插件:
  • 支持.kt.kts文件
  • 独立的LintTaskFormatTask类型用于定义自定义任务
  • 支持增量构建并通过Gradle Worker API快速并行化
  • 在可用时从.editorconfig配置
  • 可配置的报告器

任务

当您的项目使用支持的Kotlin Gradle插件之一时,Kotlinter会添加以下任务:

formatKotlin:根据ktlint规则格式化Kotlin源代码,或在无法自动格式化时发出警告。

lintKotlin:报告Kotlin lint错误,默认情况下会导致构建失败。

此外,check任务会依赖于lintKotlin

为项目中的每个源集添加了细粒度的任务:formatKotlinSourceSetlintKotlinSourceSet

Git钩子

Kotlinter可以安装一个钩子来在推送前运行(installKotlinterPrePushHook)。这个钩子会运行lintKotlin,如果有错误,则运行formatKotlin并以非零状态退出,保留更改的文件以待提交。

必须将kotlinter插件应用到根项目才能使用此任务。如果使用git worktree,您必须从父git目录安装钩子。

要在有人运行构建时自动安装钩子,请在根项目的build.gradle.kts中添加以下内容:

Kotlin
tasks.check {
    dependsOn("installKotlinterPrePushHook")
}
Groovy
tasks.named('check') {
    dependsOn 'installKotlinterPrePushHook'
}

配置

选项在kotlinter扩展中配置。以下是默认值(如果您想使用这些默认值,可以完全省略配置块)。

Kotlin
kotlinter {
    failBuildWhenCannotAutoFormat = false
    ignoreFailures = false
    reporters = arrayOf("checkstyle", "plain")
}
Groovy
kotlinter {
    failBuildWhenCannotAutoFormat = false
    ignoreFailures = false
    reporters = ['checkstyle', 'plain']
}

failBuildWhenCannotAutoFormat设置为true会配置formatKotlin任务在无法自动修复lint错误时使构建失败。将ignoreFailures设置为true会覆盖此设置。

reporters的选项:checkstylehtmljsonplainsarif

报告器的行为如描述:https://github.com/pinterest/ktlint

Editorconfig

如果存在.editorconfig文件,Kotlinter将使用它进行自我配置。 此配置包括代码风格和代码检查规则。

有关详细信息,请参阅KtLint配置

自定义任务

formatKotlin*SourceSetlintKotlinSourceSet*任务继承自SourceTask,因此您可以自定义包含、排除和源文件。

Kotlin
tasks.withType<LintTask> {
    this.source = this.source.minus(fileTree("src/generated")).asFileTree
}

tasks.withType<FormatTask> {
    this.source = this.source.minus(fileTree("src/generated")).asFileTree
}
Groovy
tasks.named("lintKotlinMain") {
  source = source - fileTree("$buildDir/generated")
}

请注意,排除路径是相对于包根目录的。

自定义任务

如果您没有使用受支持插件的自动配置,或者需要处理额外的源代码,您可以创建自定义任务:

Kotlin
import org.jmailen.gradle.kotlinter.tasks.LintTask
import org.jmailen.gradle.kotlinter.tasks.FormatTask

tasks.register<LintTask>("ktLint") {
    group = "verification"
    source(files("src"))
    reports.set(
        mapOf(
            "plain" to file("build/lint-report.txt"),
            "json" to file("build/lint-report.json")
        )
    )
}

tasks.register<FormatTask>("ktFormat") {
    group = "formatting"
    source(files("src"))
    report.set(file("build/format-report.txt"))
}
Groovy
import org.jmailen.gradle.kotlinter.tasks.LintTask
import org.jmailen.gradle.kotlinter.tasks.FormatTask

tasks.register('ktLint', LintTask) {
    group 'verification'
    source files('src')
    reports = [
            'plain': file('build/lint-report.txt'),
            'json' : file('build/lint-report.json')
    ]
}


tasks.register('ktFormat', FormatTask) {
  group 'formatting'
  source files('src/test')
  report = file('build/format-report.txt')
}

自定义ktlint版本

如果您需要使用不同版本的ktlint,可以覆盖依赖项。

Kotlin或Groovy
buildscript {
    configurations.classpath {
        resolutionStrategy {
            force(
                "com.pinterest.ktlint:ktlint-rule-engine:1.2.1",
                "com.pinterest.ktlint:ktlint-rule-engine-core:1.2.1",
                "com.pinterest.ktlint:ktlint-cli-reporter-core:1.2.1",
                "com.pinterest.ktlint:ktlint-cli-reporter-checkstyle:1.2.1",
                "com.pinterest.ktlint:ktlint-cli-reporter-json:1.2.1",
                "com.pinterest.ktlint:ktlint-cli-reporter-html:1.2.1",
                "com.pinterest.ktlint:ktlint-cli-reporter-plain:1.2.1",
                "com.pinterest.ktlint:ktlint-cli-reporter-sarif:1.2.1",
                "com.pinterest.ktlint:ktlint-ruleset-standard:1.2.1"
            )
        }
    }
}

另外,如果您有使用kotlinter的自定义构建约定插件,可以通过platform指令强制使用较新的KtLint版本:

Kotlin或Groovy
dependencies {
    implementation(platform("com.pinterest.ktlint:ktlint-bom:1.2.1"))
    implementation("org.jmailen.gradle:kotlinter-gradle:4.4.1")
}

自定义规则

您可以使用buildscript类路径添加自定义ktlint RuleSets:

Kotlin
buildscript {
    dependencies {
        classpath(files("libs/my-custom-ktlint-rules.jar"))
        classpath("org.other.ktlint:custom-rules:1.0")
    }
}
Groovy
buildscript {
    dependencies {
        classpath files('libs/my-custom-ktlint-rules.jar')
        classpath 'org.other.ktlint:custom-rules:1.0'
    }
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号