Intellij IDEA 重新格式化 scala 代码

Intellij IDEA reformat scala code

如果我的 Scala 方法声明太长而无法放在一行中,我会把它分成几行,我的重新格式化期望是:

protected def pruneFilterProject(
    relation: LogicalRelation,
    projectList: Seq[NamedExpression],
    filterPredicates: Seq[Expression],
    scanBuilder: (Array[String], Array[Filter]) => RDD[Row]) = {
  pruneFilterProjectRaw(
    relation,
    projectList,
    filterPredicates,
    (requestedColumns, pushedFilters) => {
      scanBuilder(requestedColumns.map(_.name).toArray, selectFilters(pushedFilters).toArray)
    })
}

但是在重新格式化代码(control + alt + L)之后,输出是:

protected def pruneFilterProject(
                                  relation: LogicalRelation,
                                  projectList: Seq[NamedExpression],
                                  filterPredicates: Seq[Expression],
                                  scanBuilder: (Array[String], Array[Filter]) => RDD[Row]) = {
  pruneFilterProjectRaw(
    relation,
    projectList,
    filterPredicates,
    (requestedColumns, pushedFilters) => {
      scanBuilder(requestedColumns.map(_.name).toArray, selectFilters(pushedFilters).toArray)
    })
}

在 intellij idea for scala lang 中,我应该设置哪些正确的代码样式规则来覆盖默认行为并获得我想要的输出样式?

编辑

取消选择 Align when multiline 将导致:

protected def pruneFilterProject(
  relation: LogicalRelation,
  projectList: Seq[NamedExpression],
  filterPredicates: Seq[Expression],
  scanBuilder: (Array[String], Array[Filter]) => RDD[Row]) = {
  pruneFilterProjectRaw(
    relation,
    projectList,
    filterPredicates,
    (requestedColumns, pushedFilters) => {
      scanBuilder(requestedColumns.map(_.name).toArray, selectFilters(pushedFilters).toArray)
    })
}

参数和方法主体将具有相同的缩进 (2 space),而不是所需的缩进: 两个缩进的参数列表(4 space),只有一个缩进的方法列表(2 space)

您可能想要在 Preferences 菜单的 Scala 部分的 Wrapping and Braces 选项卡的 Method declaration parameters 部分中取消选择 Align when multiline 选项。您可能还想将同一部分中的换行选项设置为 Warp if long.

为了获得所需的选项卡,您需要在 Tabs and Indents 选项卡上将 Continuation indent 设置为 4,将 Indent 设置为 2。

我建议您使用 Scalariform,它是 Scala 的代码格式化程序。它可以作为一个库、一个独立的命令行工具使用,也可以通过与各种编辑器和构建工具(如下所列)的集成来使用。

计划是在人们需要时添加首选项和功能,所以如果它没有按照您喜欢的方式格式化您的代码,请务必提出 Github 问题,我我会看看我能做什么。

Scalariform 已根据 MIT 许可证获得许可。

如果你使用 sbt, 将此添加到您的 project/plugins.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.3.0")

这是所有信息,它是在他的激活器模板中使用类型安全的,

scalriform github

https://github.com/sbt/sbt-scalariform