Scalafmt配置:如何正确格式化长链?=>中缀运算符的类型声明
Scala 3 中
?=>中缀运算符链的scalafmt格式化配置方案 针对你遇到的scalafmt挤压?=>运算符链的问题,可通过调整以下配置实现预期的换行对齐效果:
关键配置项调整
在项目根目录的.scalafmt.conf文件中添加/修改以下内容:
- 启用行首中缀运算符重写规则
强制每个?=>运算符单独换行并置于行首,保留原有的链式结构:
rewrite.rules = [InfixOperatorAtStartOfLine]
- 细化中缀运算符对齐策略
配合已启用的align.preset = more,指定对?=>的对齐规则,确保每行运算符对齐:
align.infixOperator = more # 可选:精确指定需要对齐的运算符,避免影响其他中缀符号 align.infixOperator.targets = ["?=>"]
- 设置合理的单行长度阈值
避免因单行长度限制导致运算符被强行挤压到一行:
maxColumn = 100 # 根据代码风格调整合适的列数
完整配置示例
runner.dialect = scala3 align.preset = more rewrite.rules = [InfixOperatorAtStartOfLine] align.infixOperator = more maxColumn = 100
预期格式化效果
应用配置后,原类型声明会保持你想要的换行对齐格式:
type AwesomeType[F[_], X, Y] = Foo[F] ?=> Bar[F, X] ?=> Baz[F, X] ?=> Waffle[X] ?=> F[Y]
注意:确保使用的scalafmt 3.6.1版本支持上述配置,
InfixOperatorAtStartOfLine规则在Scala 3方言下可正常工作。
内容的提问来源于stack exchange,提问作者Andrey Tyukin
相关产品推荐
相关产品推荐

