为什么try-with-resources会破坏Emacs中的缩进?“

时间:2013-05-14 23:06:38

标签: java emacs indentation code-formatting

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是非常重要的,也许是使用建议的解决方法?

2 个答案:

答案 0 :(得分:1)

这是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-07-27修复了这个错误。

答案 1 :(得分:1)

尽管http://osdir.com/ml/emacs-diffs-gnu/2013-07/msg00350.html线程确实有一个修复,但它仍然不是最新的cc模式。我抓住了最新的cc模式并安装了它,然后抓住差异并应用它(它不再适用于干净,但它很简单,很容易手工完成)。正确的缩进!比它应该更烦人的方式,但我已经正确地缩进了试块,所以我很高兴。