如何配置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
相关产品推荐
相关产品推荐

