构建器模式的 Eclipse 格式化程序设置
Posted
技术标签:
【中文标题】构建器模式的 Eclipse 格式化程序设置【英文标题】:Eclipse formatter settings for the Builder pattern 【发布时间】:2011-01-07 11:33:50 【问题描述】:我对一系列合格调用的 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());
即,如果需要,参数将被包装和缩进,并且除第一个之外的所有合格调用,除非必要,如果有多个,则被包装和缩进。如果参数列表包装在合格的调用中,则调用应首先包装。
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 应用我喜欢的格式样式或比上述任何方法更接近它的格式?
【问题讨论】:
+1 好问题。我也喜欢这个,经常使用 Google Protobufs。 【参考方案1】:用 cmets 关闭格式化,或者插入行 cmets 太繁琐了。
最好的方法描述here:
...或者您可以选择“换行>从不加入已换行 行”全局。然后,您可以手动打破它和格式化程序 只会在行内格式化(或添加额外的换行符,如果 必要)。
使用此设置,Eclipse 格式化程序将停止破坏您的构建器语句。
【讨论】:
Jakub 的解决方案可以解决问题。多年来一直在与 cmets 一起解决这个问题。有了这个修复,挑战就减少到在团队范围内强制导入格式化程序标准文件,而不是训练每个开发人员使用某些 cmets 语法。谢谢大佬。【参考方案2】:使用 cmets:
Object o = foo() //
.bar() //
.toString();
【讨论】:
并且具有可以完美推广到“在情况 Y 下如何让我的 IDE 在 X 位置换行?”形式的任何问题的优势 这让我很开心!谢谢。这是我不会像团队其他成员一样在保存时激活自动格式化的唯一原因。 我们已经到过月球又回来了,但是为了驯服代码格式化程序,我们在 2020 年仍然使用 cmets :( @kadam 您认为哪种格式化程序应该是 Java 的标准格式化程序,应该如何调用它? 我不知道答案的好问题。但是,如果我必须选择,它将是无需额外脚手架即可处理方法链的那个。【参考方案3】:在 Eclipse 3.6 中,可以关闭代码区域的格式设置。查看我对
的回答How to turn off the Eclipse code formatter for certain sections of Java code?
【讨论】:
【参考方案4】:AFAIK,这是 Eclipse 格式化程序的已知问题: https://bugs.eclipse.org/bugs/show_bug.cgi?id=59891
【讨论】:
好吧,你可以尝试扩展 ICodeFormatter 并创建自己的格式化程序:help.eclipse.org/galileo/topic/org.eclipse.jdt.doc.isv/… 嘿...它已在 Eclipse 3.6M7 上修复!【参考方案5】:2021 年更新。 可以更改,导航至:代码样式 -> 格式化程序 -> 换行 -> 换行设置 -> 函数调用 -> 合格调用 并将值更改为“包装所有元素,如果不需要,第一个元素除外”
【讨论】:
【参考方案6】:在菜单上选择 Window -> Preferences 当窗口打开时选择 Java -> Code Style -> Formatter,然后您可以通过选择新建或编辑选项创建自己的格式样式以使用。编辑格式配置文件时,会打开一个新窗口,其中提供了许多不同的选项供您使用。
【讨论】:
@ChadNC:我正在描述格式化程序首选项中的不同设置。问题是 AFAICT 的设置不够灵活。 请在投反对票时添加评论并说明理由。尤其是当您对有效回应投反对票时。我在发布答案之前创建了一个格式配置文件,它确实工作得很好。 @Chris,当我发布对您的反对票的回复时,没有看到您的评论。您没有提到您已经在使用格式化程序配置文件的事实,这就是我建议使用它的原因。顺便说一句,你和我兄弟同名。 Chris 知道格式选项,但他无法让它们为他工作。如果您创建的配置文件根据 Chris 的偏好设置格式,您可以使用该配置文件中的设置编辑您的答案吗?以上是关于构建器模式的 Eclipse 格式化程序设置的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse / Android:“在项目上运行构建器'Android Pre Compiler'时出错......”