【问题标题】:Intellij IDEA reformat scala codeIntellij IDEA 重新格式化 scala 代码
【发布时间】:2023-03-09 10:18:01
【问题描述】:

如果我有一个 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)
    })
}

但是在 Reformat Code(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 中适用于 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 个空格),而不是所需的缩进: 有两个缩进的参数列表(4 个空格),只有一个缩进的方法列表(2 个空格)

【问题讨论】:

    标签: scala intellij-idea coding-style


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我把结果格式放在答案的编辑部分,你介意再帮我一次吗?
    • 感谢更新。我想我需要的只是 Method declaration parameters continuation indent 到 4 和其他 continuation indent 到 2。这在 Intellij IDEA 中似乎不可用?
    【解决方案2】:

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

    我们的计划是在人们提出要求时添加偏好和功能,因此,如果它没有按照您希望的方式格式化您的代码,请提出 Github 问题,我会看看我能做些什么做。

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

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

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

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

    scalriform github

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2013-11-10
      • 2011-08-13
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多