Scala 代码格式化程序(Scalafmt 风格)
指导
Scala 代码格式化程序(Scalafmt 风格)
粘贴原始的 Scala 代码,即可获得符合 Scalafmt 风格的格式化代码——2 个空格缩进、平衡的大括号、标准化的操作符间距、排序的导入以及一致的尾随逗号。输出是确定性的,因此相同的输入始终产生相同的输出,这使得代码审查中的差异更清晰,并且无需再为缩进等细节争论。
如何使用
- 将您的 Scala 代码粘贴到输入框中,或加载示例以查看其工作方式。
- 选择缩进样式(2 个空格是 Scalafmt 的默认设置)以及最大列宽(80、100、120 或 160)。
- 切换您想要的选项:多行列表中的尾随逗号、排序/分组的导入、操作符间距、注释保留以及空行合并。
- 点击 格式. 使用复制按钮复制结果,或下载为
.scala文件。
特征
- Scalafmt 默认风格 —— 与官方 scalafmt 工具使用的约定保持一致,包括缩进、大括号处理以及二元操作符间距。
- 可配置的缩进 —— 选择 2 个空格、4 个空格或制表符,以匹配项目的风格指南。
- 最大列宽 —— 选择 80、100、120 或 160,以适应团队的换行策略。
- 排序并分组的导入 —— 按字母顺序重新排列导入,并将它们分为标准库、第三方和本地三个部分,组之间用空行分隔。
- 尾随逗号 —— 为多行参数和参数列表添加尾随逗号,以使版本控制差异更清晰。
- 注释保留 —— 保留行注释、块注释和 Scaladoc,同时仍对周围代码进行整理。
- 字符串和插值安全 —— 重格式化不会修改字符串、字符字面量、三引号字符串或插值的内容。
s"..."/f"..."插值 - Scala 3 兼容 —— 支持现代 Scala 3 关键字如
given,using,then,enum,并且derives. - 完全在浏览器中运行 —— 无需上传,无需服务器往返,无需数据收集。您的代码永远不会离开您的机器。
常见用例
- 在将代码片段粘贴到 Slack 线程、Stack Overflow 回答或技术博客文章之前,先进行格式化。
- 对尚未配置 scalafmt 的旧项目进行格式标准化。
- 预先格式化生成的代码(如宏输出、由模式推导出的案例类等),使其看起来像手动编写的 Scala 代码。
- 在多个作者贡献的文件中统一风格,每个贡献者使用略有不同的 IDE 设置。
- 在不启动 sbt 或 Scala 构建流程的情况下,对小规模重构进行快速检查。
常问问题
-
什么是 Scalafmt 以及为什么一致的 Scala 格式化很重要?
Scalafmt 是 Scala 生态系统的事实标准代码格式化工具。它在整个代码库中强制执行单一、确定性的风格,从而将格式化问题从代码审查讨论中移除,减少因空白字符变化引起的噪音差异,并帮助新贡献者融入项目。一致的格式化也使得扫描陌生代码更容易,因为缩进和间距始终具有相同的含义。
-
为什么 Scalafmt 默认最大列宽为 80?
80 列的传统可以追溯到早期的终端和穿孔卡片,但至今仍被保留,因为较窄的行在并排差异、代码审查工具和分屏编辑器中更易阅读。80 列限制也鼓励使用更短的标识符、更少的嵌套表达式以及更频繁地提取辅助方法。许多团队将此限制放宽到 100 或 120 列,这也是现代格式化工具允许用户配置该值的原因。
-
什么是尾随逗号以及它们有什么用?
尾随逗号是多行列表、参数列表或参数列表中最后一个元素之后的逗号。它们在格式化工具中变得普遍,因为它们使基于行的差异更清晰:添加新元素只需增加一行,而无需修改前一行以添加逗号。尾随逗号也使得重新排序行更容易,因为每个元素都以相同的方式结束。Scala 自 2.12.2 版本起就支持参数和参数列表中的尾随逗号。
-
为什么导入通常被分为标准库、第三方和本地?
按来源分组导入是一个长期存在的惯例,源自 Go 和 Python(isort)等语言。它使依赖关系的来源一目了然:标准库导入排在最前,接着是第三方库,最后是项目内部的代码。组之间的空行作为视觉锚点,使审查者能够快速识别新增的外部依赖,而这通常是值得讨论的信号。
-
语法格式化和语义格式化之间的区别是什么?
语法格式化工具仅根据源代码文本重新排列空白、换行和缩进——它不需要理解类型、解析符号或运行编译器。相比之下,语义格式化工具可以重命名标识符、根据使用频率重新排列方法或移除未使用的导入,因为它可以访问编译器对程序的视图。Scalafmt 主要为语法格式化,这使其在不完整或无法编译的代码上运行时快速且安全。
