【问题标题】:Why does try-with-resources break indentation in Emacs?"为什么 try-with-resources 会破坏 Emacs 中的缩进?”
【发布时间】:2013-05-09 09:16:31
【问题描述】:

Emacs 24 Java 模式无法正确缩进新的try-with-resource 结构。

class X{
    void foo() {
        try {
            check(); // ((statement-block-intro 35))
        }
    }

    void bar() {
        try (Lock l = bar()) {
                check(); // ((substatement 140) (statement-block-intro 140))
            }
    }
}

如上所示,这样的 try 块中的语句由额外的 4 个空格缩进,值为 c-basic-indent,包括右大括号。

我发现trytry-with-resource 之间的一个区别是块中第一个语句的句法信息,后者在头部有一个额外的(substatement)。这可能是它破裂的原因吗?

如果我从第一行手动删除 4 个空格,则其余行正确缩进,除了右括号,它继续缩进额外的空格。

这让我发疯了。如果解决它,我更改 c-guess-basic-syntax 并非易事,也许是使用建议的解决方法?

【问题讨论】:

    标签: java emacs indentation code-formatting


    【解决方案1】:

    虽然http://osdir.com/ml/emacs-diffs-gnu/2013-07/msg00350.html 线程确实有修复,但它仍然不是最新的cc-mode。我抓住了最新的 cc-mode 并安装了它,然后抓住了 diff 并应用了它(它不再干净地应用,但它很短而且很容易手工完成)。正确的缩进!比它应该的更烦人,但我已经正确缩进了 try 块,所以我很高兴。

    【讨论】:

    • 感谢您的跟进。使用我当前的版本24.4.1,即使使用emacs -q,缩进似乎也能正常工作
    【解决方案2】:

    这是emacs 中众所周知的错误,list.gnu.org 上有关于此问题的补丁,修复了此错误:https://lists.gnu.org/archive/html/bug-gnu-emacs/2013-07/msg00577.html

    此外,据此:http://osdir.com/ml/emacs-diffs-gnu/2013-07/msg00350.html 看来,此错误已在 2013 年 7 月 27 日修复。

    【讨论】:

      猜你喜欢
      • 2017-08-03
      • 2015-11-26
      • 1970-01-01
      • 2013-07-18
      • 2010-09-06
      • 2021-05-12
      • 2020-06-12
      • 2014-10-19
      • 1970-01-01
      相关资源
      最近更新 更多