java - 如何关闭eclipse Java代码的特定部分的代码格式化程序?

  显示原文与译文双语对照的内容

我有一些用SQL语句编写的Java代码,它们是Java字符串( 请不要或者/m flamewars,嵌入的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更易于阅读和维护,尤其是对于较大的查询。 例如我可以将我的编辑器放入"覆盖"模式并轻松修改文本 in-place 。

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

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

有办法指导 Eclipse 忽略某些行源对格式化?

我正在寻找一个特殊的注释来切换 Eclipse 格式化程序。 理想情况下,这样的注释可以被配置为我们所选择的,其他格式化程序也可以被编程来尊重它:


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

显然,一个"解决方案"是让我们的团队成员标准化一些外部格式化程序,比如 Jalopy 或者 JIndent,但这不是这个问题关于( 还有,我对这个项目没有决定)的问题: 我正在寻找一种方法来避免 Eclipse 格式化程序在ad-hoc基础上。

理想情况下,一个解决方案将允许我插入指令 Eclipse formatter无需使用 Eclipse 团队成员做任何ide重构(除了可能选择格式化程序不可知论者命令的评论: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING ) 。

时间:

从 Eclipse 3.5上的M4在格式化程序中有一个选项"从不联接线条",它保留了用户行的中断。 也许这就是你想要的。

否则会有这么丑的黑客


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

如果在行首放置加号,则它的格式不同:



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


不用关闭格式化,你可以配置它不加入已经包装的行。 类似抖动响应,这里是 Eclipse STS:

属性→代码样式→格式化程序→启用项目特定设置或者配置工作区设置→编辑→换行( 制表符) →检查"从不加入已经包装的行 never"

保存,应用。

enter image description here

@xpmatteo 已禁用的答案的部分代码,但除此之外,默认 Eclipse 设置应该设置为只有格式编辑行代码,而不是整个文件。


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

这将阻止它的发生首先从你的同事重新格式化代码他们实际上并没有改变。 这是一个很好的实践,以防止事故,源代码控制无用( 由于次要格式设置设置差异而重新格式化整个文件) 呈现差异。

如果打开/关闭标记选项,它也会阻止重新格式化。

我使用固定宽度 string-parts ( 用空白填充) 避免格式化程序搞乱我的SQL字符串缩进。 这给你不同的结果,不会工作空白不是被忽略,因为它是在sql,但是可以有帮助。


 final String sql ="SELECT v.value FROM properties p"
 +"JOIN property_values v ON p.property_id = v.property_id"
 +"WHERE p.product_id =?"
 +"AND v.value IS NOT NULL";

这个黑客作品:


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

我建议不要使用格式化程序。 不正确的代码应该看起来不是人工好的。 好的代码需要时间。 你不能在质量上作弊。 格式化是源代码质量的一部分。

...