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

我有一些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更易于阅读和维护(恕我直言),特别是对于较大的查询。例如,我可以将编辑器置于“覆盖”模式,并相当容易地就地修改文本。

请注意,此问题的泛化超出了 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

Eclipse 3.6 允许您通过放置特殊注释来关闭格式设置,例如

// @formatter:off
...
// @formatter:on

必须在 Eclipse 首选项中“打开”开/关功能:。单击 、 , 启用 。Java > Code Style > FormatterEditOff/On TagsEnable Off/On tags

也可以在首选项中更改魔术字符串 - 在此处查看Eclipse 3.6文档

更多信息

Java > Code Style > Formatter > Edit > Off/On Tags

此首选项允许您定义一个要禁用的标记和一个要启用格式化程序的标记(请参阅格式化程序配置文件中的“关闭/打开标记”选项卡):

enter image description here

您还需要启用标志Java Formatting


答案 2

格式化程序上Eclipse 3.5 M4的AFAIK有一个选项“永不连接行”,可以保留用户行中断。也许这符合您的需求。

否则就有这个丑陋的黑客

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