You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置scalafmt使其遵循多行方法调用的自定义格式

解决scalafmt方法调用参数换行问题

问题描述

期望的方法调用格式:

newTimeRangeList(
  MonthRanges.Y2021.Jan, MonthRanges.Y2021.Feb, MonthRanges.Y2021.Mar, MonthRanges.Y2021.Apr,
  MonthRanges.Y2021.May, MonthRanges.Y2021.Jun, MonthRanges.Y2021.Jul, MonthRanges.Y2021.Aug,
  MonthRanges.Y2021.Sep, MonthRanges.Y2021.Oct, MonthRanges.Y2021.Nov, MonthRanges.Y2021.Dec
)

当前scalafmt格式化后的结果:

newTimeRangeList(
  MonthRanges.Y2021.Jan,
  MonthRanges.Y2021.Feb,
  MonthRanges.Y2021.Mar,
  MonthRanges.Y2021.Apr,
  MonthRanges.Y2021.May,
  MonthRanges.Y2021.Jun,
  MonthRanges.Y2021.Jul,
  MonthRanges.Y2021.Aug,
  MonthRanges.Y2021.Sep,
  MonthRanges.Y2021.Oct,
  MonthRanges.Y2021.Nov,
  MonthRanges.Y2021.Dec
)

用户当前的scalafmt配置:

version = 3.7.3
docstrings.style = Asterisk
runner.dialect = scala213source3
maxColumn = 120
continuationIndent.defnSite = 2
assumeStandardLibraryStripMargin = true
rewrite.rules = [SortImports, RedundantBraces, RedundantParens, SortModifiers]
rewrite.redundantBraces.ifElseExpressions = false
rewrite.redundantBraces.generalExpressions = false
align = none
align.openParenDefnSite = false
align.openParenCallSite = false
align.tokens = []
optIn = {
  configStyleArguments = false
}
danglingParentheses.preset = false
danglingParentheses.callSite = true
rewrite.trailingCommas.style = keep
rewrite.trailingCommas.allowFolding = false
newlines.implicitParamListModifierForce = [after]
newlines.source=keep

配置调整建议

在现有配置基础上,添加或修改以下参数:

  • 修改 rewrite.trailingCommas.allowFolding = true:允许在不超出列宽时折叠参数行
  • 添加 callSite.multilineArgumentStyle = fold:核心控制参数,让scalafmt优先将参数放在同一行,仅超出列宽时换行
  • 添加 callSite.newlineAfterOpenParen = always:保持左括号后换行的格式结构
  • 添加 callSite.indentOperator = 2:统一调用点的缩进规则

调整后的完整配置:

version = 3.7.3
docstrings.style = Asterisk
runner.dialect = scala213source3
maxColumn = 120
continuationIndent.defnSite = 2
assumeStandardLibraryStripMargin = true
rewrite.rules = [SortImports, RedundantBraces, RedundantParens, SortModifiers]
rewrite.redundantBraces.ifElseExpressions = false
rewrite.redundantBraces.generalExpressions = false
align = none
align.openParenDefnSite = false
align.openParenCallSite = false
align.tokens = []
optIn = {
  configStyleArguments = false
}
danglingParentheses.preset = false
danglingParentheses.callSite = true
rewrite.trailingCommas.style = keep
rewrite.trailingCommas.allowFolding = true
newlines.implicitParamListModifierForce = [after]
newlines.source=keep
callSite.multilineArgumentStyle = fold
callSite.newlineAfterOpenParen = always
callSite.indentOperator = 2

关键参数说明

  • callSite.multilineArgumentStyle = fold:这是实现需求的核心,fold 模式会尽可能将参数合并到同一行,只有当总长度超过 maxColumn 限制时才会自动换行
  • rewrite.trailingCommas.allowFolding = true:配合折叠模式,允许保留尾随逗号并正常折叠参数行
  • callSite.newlineAfterOpenParen = always:确保方法调用的左括号后始终换行,和你手动设置的格式结构一致

内容的提问来源于stack exchange,提问作者Wojciech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:15:40