Intellij IDEA重新格式化scala代码

时间:2015-04-15 02:28:59

标签: scala intellij-idea coding-style

如果我的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)
    })
}

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

修改

取消选择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个空格),而不是所需的缩进: 带有两个缩进(4个空格)的参数列表,只有一个缩进(2个空格)的方法列表

2 个答案:

答案 0 :(得分:2)

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

为了获得您想要的标签,您需要在Continuation indent标签上将Indent设置为4并将Tabs and Indents设置为2。

答案 1 :(得分:2)

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

计划是在人们要求时添加首选项和功能,所以如果不按照您的喜好格式化代码,请提出Github问题,我会看到我能做什么做。

Scalariform根据麻省理工学院许可证获得许可。

如果你使用sbt, 将其添加到您的项目/ plugins.sbt

addSbtPlugin(“com.typesafe.sbt”%“sbt-scalariform”%“1.3.0”)

这里是所有信息,它是在他的激活模板中使用typesafe的那个,

scalriform github

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