6

try-with-resourceEmacs 24 Java モードは、新しい構造を適切にインデントしません。

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

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

上記のように、そのような try ブロック内のステートメントは、右中c-basic-indent括弧を含めて、追加の 4 つのスペース ( の値) によってインデントされます。

try私が特定したとの違いの 1 つは、ブロック内の最初のステートメントの構文情報であり、後者は先頭try-with-resourceに余分なものがあります。(substatement)これが壊れる原因になるのでしょうか?

最初の行から 4 つのスペースを手動で削除すると、余分なスペースで引き続きインデントされている右中かっこを除いて、残りの行は正しくインデントされます。

これは私を夢中にさせています。それを解決する場合、私の変更c-guess-basic-syntaxは自明ではありません。おそらくアドバイスを使用した回避策ですか?

4

2 に答える 2

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 に既に修正されているようです。

于 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 に答える