Eclipse格式化程序设置Builder模式

51

我对Eclipse针对一系列限定调用(即生成器模式样式)的格式规则感到非常沮丧。例如,下面是我对创建新的Apache Commons CLI Options对象的代码的首选格式:

  Options options = new Options()
      .addOption(OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
      .addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
          "print version and exit")
      .addOption(OptionBuilder.withLongOpt(OPTION_PROPERTIES)
                     .hasArg()
                     .withArgName("FILE")
                     .withType(File.class)
                     .withDescription("specify a user properties file")
                     .create());

也就是说,如果需要,参数会被包裹和缩进,并且除第一个外的所有合格调用(必要时)都会被包裹和缩进,如果有多个。如果参数列表在限定调用内部换行,则应该首先换行限定调用。

Eclipse中的默认格式("仅在必要时换行"参数和调用)会产生以下混乱:

  Options options = new Options().addOption(
      OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
      .addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
          "print version and exit").addOption(
          OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
              "FILE").withType(File.class).withDescription(
              "specify a user properties file").create());

进入“Java代码风格->格式化程序->换行”并将换行设置为“包装所有元素,除非第一个元素不必要”,对于调用可得到以下结果:

  Options options = new Options().addOption(
      OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
      .addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
          "print version and exit")
      .addOption(
          OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
              "FILE").withType(File.class).withDescription(
              "specify a user properties file").create());

我不喜欢 OptionBuilder 表达式没有被换行,也不喜欢 "FILE" 被换行而 withArgName 没有被换行。

将缩进改为“列上缩进”:

  Options options = new Options().addOption(OPTION_HELP_SHORT, OPTION_HELP,
                                     false, "print usage information")
                                 .addOption(OPTION_VERSION_SHORT,
                                     OPTION_VERSION, false,
                                     "print version and exit")
                                 .addOption(
                                     OptionBuilder.withLongOpt(
                                                      OPTION_PROPERTIES)
                                                  .hasArg()
                                                  .withArgName("FILE")
                                                  .withType(File.class)
                                                  .withDescription(
                                                      "specify a user properties file")
                                                  .create());

这导致换行位置不符合我的预期,并将内容推到右侧过多。

有没有办法让 Eclipse 应用我喜欢的格式化风格,或者更接近它而不是上面提到的任何一个?


4
好问题。我也希望能有这个功能,因为我经常使用Google Protobufs。 - JesperE
请考虑将接受的答案更改为此答案:https://dev59.com/A3I95IYBdhLWcg3w5SSh#68246533 - D-Klotz
6个回答

43

使用注释关闭格式化或插入行注释太麻烦了。

最好的方法在这里描述:

... 或者您可以全局选择“Line Wrapping> Never join already wrapped lines”。然后,您可以手动中断它,格式化程序只会在行内格式化(或必要时添加附加换行符)。

使用此设置,Eclipse格式化程序将停止破坏您的构建器语句。

enter image description here


3
Jakub在这里提供的解决方案能够解决问题。我一直在用注释绕开这个问题,已经好几年了。有了这个修复,我们只需要强制整个团队导入格式化标准文件,而不是训练每个开发者使用某些注释语法进行格式化。感谢你,伙计。 - Steven Francolla

33

使用注释:

   Object o = foo() //
      .bar() //
      .toString();

3
优点在于它可以完美地泛化到任何形式的问题:“如何让我的IDE在Y情况下在X位置处断开行?” - Chris Conway
这让我很开心!谢谢。 这是我不像团队其他成员那样激活保存时自动格式化的唯一原因。 - Raphael Jolivet
1
我们已经去过月球并回来了,但在2020年,为了驯服代码格式化程序,我们仍然使用注释 :( - kadam
@kadam 你认为哪种格式化程序应该成为Java的标准格式化程序,它应该如何调用? - Thorbjørn Ravn Andersen
@alex 如果你无法控制格式化程序,那么这可能是你能做的最好的事情了。不过,自从2010年回答这个问题以来,情况有所改变。也许你想提供一个更为可笑的2021年答案? - Thorbjørn Ravn Andersen
显示剩余2条评论

9

2021年更新:可以更改,导航到:代码风格 -> 格式化程序 -> 换行 -> 换行设置 -> 函数调用 -> 限定调用并将值更改为“包装所有元素,除非第一个元素不必要”。


1
这个应该被点赞并且改为被接受的答案,因为它是有效的。非常感谢你! - D-Klotz

4

3

你可以尝试扩展ICodeFormatter并创建自己的格式化程序: http://help.eclipse.org/galileo/topic/org.eclipse.jdt.doc.isv/reference/extension-points/org_eclipse_jdt_core_codeFormatter.html - nanda
嘿...它在Eclipse 3.6M7上被修复了! - nanda

-4
在菜单中选择“窗口” -> “首选项”,当窗口打开时,选择“Java” -> “代码风格” -> “格式化程序”,从那里您可以通过选择新建或编辑选项来创建自己的格式样式。当编辑格式化配置文件时,将打开一个新窗口,该窗口为您提供许多不同的选项可供使用。

@ChadNC:我正在描述Formatter偏好设置中的不同设置。问题是据我所知,这些设置并不够灵活。 - Chris Conway
请在下投票时添加一条评论说明原因,尤其是当您对一个有效的回答进行投票时。在我发布答案之前,我创建了一个格式配置文件,它确实可以正常工作。 - ChadNC
@Chris,在我回复你的负评时,没有看到你的评论。你没有提到你已经在使用格式化程序文件,这就是我建议你使用它的原因。顺便说一下,你和我兄弟的名字一样。 - ChadNC
3
Chris知道有哪些格式选项,但他不知道如何将它们应用到自己的文档中。如果您创建的个人资料可以按照Chris的偏好设置格式,那么您能否在您的答案中编辑这些设置? - rsp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接