如何配置Scalafmt使match表达式换行符合预期?
Scalafmt Match分支格式化配置方案
问题现状
当前Scalafmt对match分支的格式化会将中缀操作符拆分到两行:
case Some(thing) => s ++ myMethodName(Some(my.other.method(argument)))
期望实现两种效果:
- 行宽足够时,
=>后直接换行,中缀操作符与参数同行:
case Some(thing) => s ++ myMethodName(Some(my.other.method(argument)))
- 行宽不足时,仅在方法参数内部换行:
case Some(thing) => s ++ myMethodName( Some(my.other.method(argument)) )
关键配置调整
修改Scalafmt配置文件,添加以下核心配置项:
newlines { source = fold beforeMultiline = fold afterInfix = some forceBeforeMultilineAssign = any // 强制case箭头后换行,避免操作符拆分 afterCaseArrow = always } infix { // 确保中缀操作符与右侧参数保持同一行 newlineAfterOp = false preserveSpace = true } // 设置合适的行宽阈值,控制内部换行触发时机 maxColumn = 80
配置说明
newlines.afterCaseArrow = always:这是实现=>后换行的核心配置,强制所有match分支的箭头后直接换行infix.newlineAfterOp = false:禁止中缀操作符(如++)单独留在上一行,确保操作符与右侧表达式绑定maxColumn:根据你的代码风格设置行宽,当整个表达式长度超过该值时,Scalafmt会自动将方法的嵌套参数拆分为多行
应用上述配置后,就能得到你期望的格式化效果。
内容的提问来源于stack exchange,提问作者Adam Mackler
相关产品推荐
相关产品推荐

