【问题标题】:Eclipse Formatter Options for '.' Alignment (Java) [duplicate]'.' 的 Eclipse 格式化程序选项对齐(Java)[重复]
【发布时间】:2013-01-13 03:56:17
【问题描述】:

我希望 Eclipse 格式化一些调用构建器的代码,如下所示:

final Item item = new Item.Builder()
                          .name("something")
                          .field("a value")
                          .build();

即对齐“。”第一行的字符。我可以通过手动对齐第二行(.name("something"))来手动说服 Eclipse 执行此操作,但任何自动格式化都会破坏这一点。

我已经尝试过在 Eclipse 中可以找到的所有各种格式选项,但似乎没有一个能满足我的要求。关于是否有以这种方式布局代码的格式选项有什么想法吗?

【问题讨论】:

  • 我个人认为这是格式化代码的不好方法。如果您将项目重命名为 carPart,那么您的格式将关闭,或者您必须触摸以下所有行。如果您在 ppl 团队中并且您使用 SCM,那么这将是一个丑陋的签入,因为您触及了与您的实际更改无关的行,即重命名。在您的宠物项目中不是问题。当老板在你的脖子上喘不过气来时,在生产问题后试图查明变化时,这是一个大问题。
  • 如果您不允许行的长度不受限制,那么行长度的任何更改都可能对后续行造成连锁反应,所以我不明白这是一个特殊情况。如果您按照您所说的方式进行重构,那么您应该将其作为单独的提交进行,以便与任何其他代码更改分开。

标签: java eclipse


【解决方案1】:

在点位置精确对齐是不可能的,但是每个方法调用的换行符可以自动完成。我已经创建了这个输出

void format() {
    Test test = new Test()
            .a()        // this call can also be configured to be one line above
            .b()
            .c();
}

通过选择格式化程序设置中的换行选项卡,选择函数调用、合格调用,在组合中切换换行策略包装所有元素,每个元素换行,最后选中复选框强制拆分,即使行短于最大线宽

您可以通过选择“...除了第一个元素”策略将第一个方法调用放入第一行。

【讨论】:

  • 你能用这个试试吗: private static String getErrorMessage(final MyFile file) { return new StringBuilder(ERROR_MESSAGE).append(" ").append(file.getDataType()).append(" ").append(FILE_NAME).append(file.getFileNameNoPathNoSuffix()).toString(); } 我想你会看到结果真的很丑——至少在 Eclipse Luna 中是这样。你用的是什么版本?
【解决方案2】:

创建一个新的格式化程序:

Properties -> Formater -> Configure Workspace Settings -> New

然后在标签Off/On Tags设置Enable Off/On tags

然后像这样围绕你的代码:

/* @formatter:off */
final Item item = new Item.Builder()
                          .name("something")
                          .field("a value")
                          .build();
/* @formatter:on */

【讨论】:

  • 感谢您的回复。不幸的是,我有大量格式错误的代码,我希望 Eclipse 根据问题中的标准对其进行格式化,而不必手动执行。
【解决方案3】:

我认为,您可以通过使用“jalopy”来实现这一点。如果您使用 Maven,则有一个 Maven 插件。

如果您想使用 jalopy,那么您感兴趣的设置是 alignment 元素中的 <methodCallChain>,您应该将其值设置为 true

已编辑:maven jalopy plugin。确保以clean 阶段为目标并使用目标format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2011-07-13
    • 2013-05-20
    • 2013-11-16
    • 2021-05-10
    • 2021-01-12
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多