迁移到 Kotlin 代码风格
Kotlin 编码约定和 IntelliJ IDEA 格式化程序
Kotlin 编码约定 影响了编写惯用 Kotlin 代码的多个方面,其中一套旨在提高 Kotlin 代码可读性的格式化建议也包含在内。
不幸的是,IntelliJ IDEA 内置的代码格式化程序在其发布之前就已经工作了很长时间,现在其默认设置产生的格式与当前推荐的格式有所不同。
通过切换 IntelliJ IDEA 中的默认设置并使格式与 Kotlin 编码约定保持一致,似乎是消除这种不一致的合乎逻辑的下一步。但这将意味着,所有现有的 Kotlin 项目在 Kotlin 插件安装的那一刻,都将启用新的代码风格。这并不是插件更新的预期结果,对吗?
这就是我们采用以下迁移计划的原因:
- 从 Kotlin 1.3 开始,默认启用官方代码风格格式化,仅针对新项目(旧格式可手动启用)
- 现有项目的作者可以选择迁移到 Kotlin 编码约定
- 现有项目的作者可以选择在项目中明确声明使用旧代码风格(这样项目在将来切换默认设置时不会受到影响)
- 在 Kotlin 1.4 中切换到默认格式化,使其与 Kotlin 编码约定保持一致
“Kotlin 编码约定”与“IntelliJ IDEA 默认代码风格”之间的差异
最显著的变化在于续行缩进策略。一个不错的想法是使用双倍缩进来表示多行表达式在前一行尚未结束。这是一个非常简单且通用的规则,但某些 Kotlin 结构以这种方式格式化时会显得有点笨拙。在 Kotlin 编码约定中,建议在之前被迫使用长续行缩进的情况下使用单倍缩进。

实际上,相当多的代码会受到影响,因此这可以被视为一次重大的代码风格更新。
迁移到新代码风格的讨论
如果从新项目开始,并且没有以旧方式格式化的代码,那么采用新代码风格可能是一个非常自然的过程。因此,从 1.3 版本开始,Kotlin IntelliJ 插件创建新项目时会使用来自 编码约定 文档的格式,并且该格式默认启用。
更改现有项目中的格式化是一个更具挑战性的任务,可能应该首先与团队讨论所有注意事项。
在现有项目中更改代码风格的主要缺点是,blame/annotate 版本控制系统 (VCS) 功能会更频繁地指向不相关的提交。虽然每个版本控制系统都有某种方式来处理这个问题(IntelliJ IDEA 中可以使用 "Annotate Previous Revision"),但重要的是要决定新风格是否值得所有这些努力。将重新格式化提交与有意义的更改分开的做法对后续调查有很大帮助。
此外,对于大型团队来说,迁移可能更困难,因为在多个子系统中提交大量文件可能会在个人分支中产生合并冲突。虽然每个冲突解决通常都很简单,但明智的做法是了解当前是否有大型功能分支正在开发中。
通常,对于小型项目,我们建议一次性转换所有文件。
对于中型和大型项目,这个决定可能很困难。如果您不准备立即更新许多文件,您可以决定逐模块迁移,或者仅对修改过的文件进行逐步迁移。
迁移到新代码风格
切换到 Kotlin 编码约定代码风格可以在 设置/偏好设置 | 编辑器 | 代码风格 | Kotlin 对话框中完成。将方案切换到 项目,然后激活 设置自... | Kotlin 风格指南。
为了向所有项目开发者共享这些更改,必须将 .idea/codeStyle
文件夹提交到版本控制系统 (VCS)。
如果项目使用外部构建系统进行配置,并且已决定不共享 .idea/codeStyle
文件夹,则可以通过附加属性强制执行 Kotlin 编码约定:
在 Gradle 中
在项目根目录的 gradle.properties
文件中添加 kotlin.code.style=official
属性,并将该文件提交到版本控制系统。
在 Maven 中
将 kotlin.code.style official
属性添加到根 pom.xml
项目文件中。
<properties>
<kotlin.code.style>official</kotlin.code.style>
</properties>
DANGER
设置 kotlin.code.style 选项可能会在项目导入期间修改代码风格方案,并可能更改代码风格设置。
更新代码风格设置后,在项目视图中对所需范围激活 重新格式化代码。

为了逐步迁移,可以启用 文件未按项目设置格式化 检查。它将高亮显示应该重新格式化的地方。启用 仅应用于修改的文件 选项后,检查将仅在修改过的文件中显示格式化问题。这些文件无论如何可能很快就会被提交。
在项目中存储旧代码风格
始终可以将 IntelliJ IDEA 代码风格明确设置为项目的正确代码风格:
- 在 设置/偏好设置 | 编辑器 | 代码风格 | Kotlin 中,切换到 项目 方案。
- 打开 加载/保存 选项卡,并在 使用默认自 中选择 Kotlin 过时 IntelliJ IDEA 代码风格。
为了在项目开发者之间共享更改,.idea/codeStyle
文件夹必须提交到版本控制系统。或者,对于使用 Gradle 或 Maven 配置的项目,可以使用 kotlin.code.style=obsolete。