IntelliJ Idea:Scala 案例类成员的冒号对齐?

Posted

技术标签:

【中文标题】IntelliJ Idea:Scala 案例类成员的冒号对齐?【英文标题】:IntelliJ Idea: Align on Colon for Scala Case Class Members? 【发布时间】:2016-06-29 19:42:00 【问题描述】:

有没有办法阻止 Idea 重新格式化多行案例类成员?

预期结果 (冒号的位置不是那么重要,但是类型注释的对齐会很好)

case class ApiError(
  timestamp : LocalDateTime,
  status    : Int,
  code      : Option[String],
  message   : String
)

我在 Scala 的代码样式设置中花了一些时间,并且一直坚持使用这样的代码样式:

case class ApiError(
  timestamp: LocalDateTime,
  status: Int,
  code: Option[String],
  message: String
)

我可以用@formatter:off 把代码弄得乱七八糟,但如果有更好的方法那就太好了。

【问题讨论】:

旁注:考虑一下您是否真的想要这个。一旦您将代码格式化为这样,并且添加了一个名称比其他成员长的新成员,您将看到 VCS 历史记录中的所有行都发生了变化——即使实际上只有一个成员加入。为什么要使一行的格式如此依赖于其他不相关的行? - 最重要的是,您确定您的代码只能使用固定宽度的字体正确查看。再说一遍,为什么?您所需的格式可以让您更轻松地了解用于成员的类型,但更难查看哪个成员具有哪种类型。 @Madoc 我同意与 VC 结合的缺点。目前,视觉上的整理(当然,这是非常主观的)证明了我的理由(我在过去的两个 JS 项目中以类似的方式做到了这一点,并开始喜欢它构建代码的方式)。准确地说,我不一定希望 Idea 将其作为自动格式化选项提供,而是作为 重新格式化时保留类型的设置。 当然,这只是一个意见。就个人而言,我转向了 Scala 代码的自动代码格式化。对于 Java 代码,我仍然保持打开状态。 【参考方案1】:

我的 IntelliJ IDEA 版本是 Ultimate 2019.3

步骤 1. 首选项 -> 编辑器 -> 代码样式 -> Scala

步骤 2. Wrapping and Braces -> 方法声明参数,然后 检查“在多行声明中对齐参数类型”

我尝试了有问题的示例,它是

case class ApiError(
                     timestamp: LocalDateTime,
                     status   : Int,
                     code     : Option[String],
                     message  : String
                   )

如果取消勾选“多行对齐”,则与预期结果一致。

case class ApiError(
  timestamp: LocalDateTime,
  status   : Int,
  code     : Option[String],
  message  : String
)

【讨论】:

【参考方案2】:

就像 Madoc 评论的那样,这些格式在添加新行时可能会导致巨大的变化。此外,虽然在小情况下相当不错,但它无法扩展,而且我们似乎是在表格中编程......

【讨论】:

以上是关于IntelliJ Idea:Scala 案例类成员的冒号对齐?的主要内容,如果未能解决你的问题,请参考以下文章

Scala+IntelliJ IDEA

IntelliJ Idea 中用于 Scala 的模块 SDK

在Intellij IDEA搭建Scala开发环境,以及使用Intellij IDEA开发Scala程序

用maven来创建scala和java项目代码环境(图文详解)(Intellij IDEA(Ultimate版本)Intellij IDEA(Community版本)和Scala IDEA for

mac安装scala并配置intelliJ IDEA

IntelliJ IDEA scala的源码设置