6

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,包括右大括号。

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

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

这让我发疯了。如果解决它,我的改变c-guess-basic-syntax不是微不足道的,也许是使用建议的解决方法?

4

2 回答 2

1

这是一个众所周知的错误,emacslist.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 日得到修复。

于 2014-03-24T11:11:55.007 回答
1

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

于 2015-01-08T21:42:18.750 回答