如何使用scalafmt为模式匹配语法中的案例配置alignToken?

如何使用scalafmt为模式匹配语法中的案例配置alignToken?,scala,format,scalafmt,Scala,Format,Scalafmt,在scala中使用scalafmt并在我的.scalafmt.conf文件中具有以下内容: style = default maxColumn = 120 continuationIndent.callSite = 2 continuationIndent.defnSite = 2 align.openParenDefnSite = false align.openParenCallSite = false danglingParentheses = true indentOperator =

在scala中使用scalafmt并在我的
.scalafmt.conf
文件中具有以下内容:

style = default
maxColumn = 120
continuationIndent.callSite = 2
continuationIndent.defnSite = 2
align.openParenDefnSite = false
align.openParenCallSite = false
danglingParentheses = true
indentOperator = spray
project.excludeFilters = [".*\\.sbt"]
rewrite.rules = [RedundantBraces, RedundantParens, SortModifiers, prefercurlyfors]
unindentTopLevelOperators = true
importSelectors = singleLine
spaces.afterKeywordBeforeParen = true
lineEndings = unix
newlines.penalizeSingleSelectMultiArgList = false
newlines.alwaysBeforeElseAfterCurlyIf = false
binPack.literalArgumentLists = false
runner.optimizer.forceConfigStyleMinArgCount = 1
它当前从以下位置对齐大小写箭头标记:

object Object {
  def f(s: String): Int = s match {
    case "a" => 1
    case "b" | "c" | "d" => 2
    case "e"=> 3
    case _  => 4
  }
}
为此:

object Object {
  def f(s: String): Int = s match {
      case "a"             => 1
      case "b" | "c" | "d" => 2
      case "e"             => 3
      case _               => 4
  }
}
我不希望为了最小化拉取请求中的空白噪声而使代码在箭头上对齐,特别是在重命名一行时,这会改变整个块的缩进级别

阅读本文,我只了解默认情况:

align.tokens默认值:
[caseArrow]

对齐标记是一对代码,它是 令牌的运算符和所有者,这是最接近的树的类型 拥有该令牌的节点。如果未提供所有者,则所有树 种类将匹配

x match {
  case 1  => 1 -> 2
  case 11 => 11 -> 22
}
此示例的配置

align.tokens = [{code = "=>", owner = "Case"}]
我不仅想禁用对齐,还想让scalafmt确保
=>
箭头前后都有一个空格。(因此,它的工作原理应该与目前的工作方向相反。)


如何实现这一点?

似乎没有方便的
align.tokens.remove
方法与
align.tokens.add
方法一起使用,但是可以通过手动指定
align.tokens
参数实现等效行为

如果添加到配置中,以下几行将复制除
case=>
标记之外的所有内容的默认对齐标记行为。它也不会对齐
案例⇒标记,除非您做了一些不寻常的事情,否则应该保持与
=>
相同的对齐行为

align.tokens = [
    { code = "extends", owner = "Defn.(Class|Trait|Object)" }
    { code = "//", owner = ".*" }
    { code = "{", owner = "Template" }
    { code = "}", owner = "Template" }
    { code = "%", owner = applyInfix }
    { code = "%%",owner =  applyInfix }
    { code = "%%%",owner =  applyInfix }
    { code = "<-", owner = "Enumerator.Generator" }
    { code = "←", owner = "Enumerator.Generator" }
    { code = "->", owner = applyInfix }
    { code = "→", owner = applyInfix }
    { code = "=", owner = "(Enumerator.Val|Defn.(Va(l|r)|Def|Type))" }
]
align.tokens=[
{code=“extends”,owner=“Defn.(类| Trait | Object)”}
{code=“/”,owner=“.*”}
{code=“{”,owner=“Template”}
{code=“}”,owner=“Template”}
{code=“%”,owner=applyInfix}
{code=“%%”,所有者=applyInfix}
{code=“%%%”,所有者=applyInfix}
{code=”“,owner=applyInfix}
{代码=”→", 所有者=applyInfix}
{code=“=”,owner=“(Enumerator.Val | Defn.(Va(l | r)| Def | Type))”}
]
令牌的默认列表取自源代码文件,它们包含在
default
对象中

如果要删除其他令牌格式实例,只需从映射中删除它们的实例


请注意,如果在更新版本的scalafmt中添加了其他默认标记,则您必须手动将它们添加到配置中的此参数中才能获得该功能。

您当前的scalafmt文件是什么,以便我们可以知道哪些可以更改,哪些不可以更改。因为如果您可以禁用所有内容,则“align=none”将起作用,尽管我uspect这将破坏其他地方的格式,这不是一个可接受的解决方案。实际上,经过一些快速测试,您想要的行为似乎是case语句箭头的默认行为,因此修复方法是只删除scalafmt文件中导致其尝试以其他方式对齐的任何一行。无法进一步诊断但是,她没有该文件。@DavisBroda很抱歉省略了配置,我已将内容添加到问题中。我想我还应该删除
{code=”⇒“,owner=“Case”}
Case,因为它只是unicode符号的一部分,不是吗?是的,也应该删除它,除非您出于某种原因想对齐
符号与=>符号不同。我会将其编辑为答案,因为我假设大多数人希望案例得到相同的处理