如何关闭Java代码某些部分的Eclipse代码格式化程序?

て烟熏妆下的殇ゞ 提交于 2020-02-26 00:40:43

我有一些Java代码,其中的SQL语句编写为Java字符串(请不要使用OR / M烈火,嵌入式SQL就是它-不是我的决定)。

为了简化维护,我将SQL语句在几行代码上从语义上分为了多个串联的字符串。 因此,而不是像这样:

String query = "SELECT FOO, BAR, BAZ FROM ABC WHERE BAR > 4";

我有类似的东西:

String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";

这种样式使SQL更易于阅读和维护(IMHO),尤其是对于较大的查询。 例如,我可以将编辑器置于“覆盖”模式并相当容易地就地修改文本。

请注意,此问题超出了SQL的特定示例的范围。 用任何垂直格式编写的任何代码,特别是表格结构,都容易被漂亮的打印机破坏。

现在,一些项目成员使用Eclipse编辑器,并且在格式化整个源文件时常常会破坏语义格式。

有没有一种方法可以指示Eclipse在格式化方面忽略某些源代码行?

我正在寻找类似特殊注释的东西,以切换Eclipse格式化程序。 理想情况下,这样的注释可以配置为我们选择的任何格式,并且其他格式化程序也可以编程为尊重它:

// STOP-ECLIPSE-FORMATTING
String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";
// START-ECLIPSE-FORMATTING

显然,一个“解决方案”是让我们的团队成员标准化一些外部格式化程序,例如JalopyJIndent ,但这不是这个问题的重点(也是我对这个项目的决定):我正在寻找一种方法避免临时使用Eclipse格式化程序。

理想情况下,一种解决方案将允许我插入Eclipse格式化程序的说明, 而无需使用Eclipse的团队成员进行任何IDE重新配置 (除了可能选择与格式化程序无关的命令注释: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING )。


#1楼

@xpmatteo可以禁用部分代码,但是除此之外,默认的eclipse设置应该设置为仅格式化已编辑的代码行,而不是整个文件。

Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines

因为您的同事正在重新格式化他们实际上没有更改的代码,所以这首先可以防止它发生。 这是一个很好的做法,可以防止使源代码控件上的差异变得无用的麻烦(当由于格式设置的微小差异而重新格式化整个文件时)。

如果关闭了开/关标签选项,这也将阻止重新格式化。


#2楼

这个hack的作品:

String x = "s" + //Formatter Hack
    "a" + //
    "c" + //
    "d";

我建议不要使用格式化程序。 错误的代码应该看起来不好而不是人为地好。 好的代码需要时间。 您不能欺骗质量。 格式化是源代码质量的一部分。


#3楼

格式化程序上的Eclipse 3.5 M4的AFAIK具有一个选项“从不连接线”,它保留用户换行符。 也许这就是您想要的。

否则会有这个丑陋的骇客

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";

#4楼

如果将加号放在行首,则格式会有所不同:

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";

#5楼

在SO上看到这个答案

您可以使用另一种解决方案来禁止特定块注释的格式。 在块注释的开头使用/*- (注意连字符),如果格式化文件的其余部分,则格式不会受到影响。

/*-
 * Here is a block comment with some very special
 * formatting that I want indent(1) to ignore.
 *
 *    one
 *        two
 *            three
 */

资料来源: Oracle文档

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!