Builder模式的Eclipse格式化程序设置

Chr*_*way 38 java eclipse code-formatting

对于一系列合格调用的Eclipse格式化规则(即Builder模式样式),我非常沮丧.例如,以下是我创建新的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());
Run Code Online (Sandbox Code Playgroud)

即,参数在必要时被包装和缩进,除非必要,所有合格的调用都被包装并缩进(如果有多个).如果参数列表包含在限定调用内,则调用应首先包装.

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());
Run Code Online (Sandbox Code Playgroud)

进入"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());
Run Code Online (Sandbox Code Playgroud)

我不喜欢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());
Run Code Online (Sandbox Code Playgroud)

这打破了我更喜欢的界限,但把事情推到了太远的地方.

有没有办法说服Eclipse应用我喜欢的格式样式或更接近它的东西比上述任何一种?

Tho*_*sen 32

使用评论:

   Object o = foo() //
      .bar() //
      .toString();
Run Code Online (Sandbox Code Playgroud)

  • 并且有一个优点是可以完全推广到任何形式的问题"如何在环境Y下让我的IDE在X位置断线?" (3认同)

Jak*_*ski 30

使用注释关闭格式或插入行注释太繁琐了.

这里描述最好的方法:

...或者您可以在全球范围内选择"线条包裹>从不加入已包裹的线条".然后,您可以手动中断它,格式化程序将只格式化内部行(或必要时添加其他换行符).

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

在此输入图像描述

  • 雅各布的解决方案就是这样做的.多年来一直在努力解决这个问题.通过此修复,减少了挑战,以强制团队范围内导入格式化程序标准文件,而不是培训每个开发人员使用一些注释语法.谢啦. (2认同)

Mak*_*lev 10

2021 年更新。可以更改,导航到:代码样式 -> 格式化程序 -> 换行 -> 换行设置 -> 函数调用 -> 限定调用,并将值更改为“如果不需要,则换行除第一个元素之外的所有元素