2015-04-15 204 views
2

如果我有一个Scala的方法声明太长,不适合在单行线,我想它在几个线分开,和我重新格式化的期望是:IntelliJ IDEA的格式化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的正确的代码样式规则斯卡拉郎,我应该设置覆盖默认行为,并让我的期望输出的风格?

编辑

取消选择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

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

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

+0

谢谢,我把结果格式放在答案的“编辑”部分,你会介意再帮助我吗? –

+0

感谢您的更新。我认为我需要的只是'方法声明参数''继续缩进'到4和其他'延续缩进'到2,这在Intellij IDEA中似乎不可用? –

2

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

该计划是在人们要求他们时添加首选项和功能,因此如果不按照您喜欢的方式设置代码格式,请提出Github问题,我会看到我可以做。

Scalariform根据MIT许可证授权。

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

addSbtPlugin( “com.typesafe.sbt” % “SBT-梯状” % “1.3.0”)

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

scalriform github

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

相关问题