我有一些Java代码,其中SQL语句编写为Java字符串(请不要使用OR / 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更容易阅读和维护(恕我直言),尤其是对于较大的查询 . 例如,我可以将我的编辑器置于“覆盖”模式并相当容易地就地修改文本 .
Note that this issue generalizes beyond the particular example of SQL. Any code that is written with any vertical formatting, particularly tabular constructs, is susceptible to destruction by a pretty printer.
现在,一些项目成员使用Eclipse编辑器,并且在格式化整个源文件时经常会破坏语义格式 .
Is there a way to instruct Eclipse to ignore certain lines of source with respect to formatting?
我正在寻找像切换Eclipse格式化程序的特殊注释 . 理想情况下,这样的评论可以配置为我们选择的任何内容,其他格式化程序也可以编程为尊重它:
// STOP-ECLIPSE-FORMATTING
String query =
"SELECT FOO, BAR, BAZ" +
" FROM ABC " +
" WHERE BAR > 4 ";
// START-ECLIPSE-FORMATTING
显然,一个"solution"是让我们的团队成员在一些外部格式化程序(如Jalopy或JIndent)上标准化,但是's not what this question is about (also, not my decision on this project): I'm特别寻找一种方法来临时避免Eclipse格式化程序 .
理想情况下,解决方案将允许我插入Eclipse格式化程序 without requiring team members using Eclipse to do any IDE reconfiguration 的指令(除了可能选择格式化程序无关的命令注释: STOP-ECLIPSE-FORMATTING
→ STOP-FORMATTING
) .
12 回答
@xpmatteo具有禁用部分代码的答案,但除此之外,默认的eclipse设置应设置为仅格式化已编辑的代码行而不是整个文件 .
由于您的同事正在重新格式化他们实际上没有改变的代码,因此这可以防止它首先发生 . 这是一种很好的做法,可以防止在源代码控制上呈现diff的错误(当由于较小的格式设置差异而重新格式化整个文件时) .
如果关闭开/关标签选项,它还会阻止重新格式化 .
Eclipse 3.6允许您通过放置特殊注释来关闭格式,例如
必须在Eclipse首选项中打开/关闭功能"on":Java>代码样式>格式化程序 . 单击编辑,关/开标签,启用启用关/开标签 .
也可以在首选项中更改魔术字符串 - check out the Eclipse 3.6 docs here .
More Information
Java>代码样式>格式化程序>编辑>关/开标签
此首选项允许您定义一个要禁用的标记,并使用一个标记来启用格式化程序(请参阅格式化程序配置文件中的“关闭/开启标记”选项卡):
您还需要从Java格式化启用标志
见this answer on SO .
您可以使用另一种解决方案来抑制特定块注释的格式 . 在块注释的开头使用
/*-
(注意连字符),如果格式化文件的其余部分,格式不会受到影响 .资料来源:Documentation at Oracle .
如果将加号放在行的开头,则格式不同:
您必须打开添加格式化程序标记的功能 . 在菜单栏中去:
Windows→首选项Java→代码样式→格式化程序
按“编辑”按钮 . 选择最后一个选项卡 . 注意On / Off框并使用复选框启用它们 .
我正在使用固定宽度的字符串部分(用空格填充)以避免格式化程序弄乱我的SQL字符串缩进 . 这为您提供了混合结果,并且在SQL中没有忽略空格的情况下不起作用,但可能会有所帮助 .
格式化程序中来自Eclipse 3.5 M4的AFAIK有一个选项“Never Join Lines”,可以保留用户换行符 . 也许那就是你想要的 .
还有这个丑陋的黑客
这个黑客有效:
我建议不要使用格式化程序 . Bad code should look bad not artificially good. 好的代码需要时间 . 你不能在质量上作弊 . 格式化是源代码质量的一部分 .
幻影评论,添加
//
你想要新的线条,是伟大的!@formatter:off将代码中的引用添加到编辑器中 . 在我看来,代码应该没有这样的引用 .
无论使用何种格式化工具,幻像注释(//)都将起作用 . 无论是Eclipse还是InteliJ或您使用的任何编辑器 . 这甚至适用于非常好的Google Java Format
幻像注释(//)将在您的应用程序中运行 . 如果你也有Javascript,也许使用像JSBeautifier这样的东西 . 您也可以在Javascript中使用类似的代码样式 .
Actually, you probably DO want formatting 对吗?您想要删除混合制表符/空格和尾随空格 . 您希望根据代码标准缩进行 . What you DONT want is a long line. 那只是幻影评论给你的东西!
用双斜杠“//”结束每一行 . 这将使eclipse无法将它们全部移动到同一条线上 .
您可以将其配置为不加入已包装的行,而不是关闭格式 . 与Jitter相似响应,这是Eclipse STS:
属性→Java代码样式→格式化程序→启用项目特定设置或配置工作区设置→编辑→换行(选项卡)→选中“从不加入已包装的行”
保存,申请 .
替代方法:在Eclipse 3.6中,在“Line Wrapping”下,然后在“常规设置”中有一个选项“从不加入已包装的行” . 这意味着格式化程序将包装长行但不撤消已有的任何包装 .