0

私は、emacs で Actionscript 3 コードをインデントするためにactionscript-mode-connors.elを使用しています。

私はほとんどのことを理解しましたが、気になることの1つは、関数の引数としてインラインクロージャーを使用すると、関数の内部のインデントが台無しになることです。

例えば:

var foo:int = some_function(
  bar,
  baz,
  function():void {
                              return qux();
                            },
  zap);

return qux() を、開いた括弧からの単一のインデントではなく、前の行の関数宣言からの単一のインデントにしたい。「バー」のインデントも台無しにされていましたが、それを修正しました

(add-hook 'actionscript-mode-hook
      (lambda ()
        (c-set-offset 'arglist-intro '+)
        (c-set-offset 'arglist-close 0)))

通常、ここでは Cc Cs を使用して、どの構文シンボルを変更する必要があるかを判断しますが、「return qux()」行の問題は、構文コンテキストが

((arglist-cont-nonempty 731 758) (brace-list-intro 731))

これらの数字は「some_function」行を参照しています。「arglist-cont-nonempty」は間違いのようです。その行の開き括弧の後には何もないため、「arglist-cont」にする必要があるようです。「arglist-cont-nonempty」のインデントを変更することはできません。これは、開き括弧が「some_function」行を終了しない場合にも影響するためです。

どうすればこれを修正できますか?

4

2 に答える 2

2

ActionScriptにはespresso-modeを使用します。例を正しくインデントします。

于 2009-10-01T21:00:05.130 に答える
1

間接的な答えはどうですか?C インデント マシンに比較的慣れているようですね。アドバイスを使用し'c-guess-basic-syntaxて特定の構成を認識し、その状況に最も適していると思われる構成に変更することをお勧めします。

コメントのインデントのカスタマイズに関するこの回答を見ると、インデントの時点でのみ、基本的に同じことを行いました。

あなたの詳細に関して、私はあなたが持っているのと同じ失敗を再現することはできません.そのコードのチャンク('actionscript-modeあなたの2つの変更で)の私のインデントは次のようになります:

var foo:int = some_function(
  bar,
  baz,
  function():void {
    return qux();
  },
  zap);

また、このreturn qux();行の構文は次のとおり((brace-list-intro 319))です。

あなたの勘は正しいようです (arglist-cont-nonemptyリストが問題であるということです)。出力を変更する'c-guess-basic-syntaxことは実行可能な解決策のようです。

明白なテストも指摘できますか?カスタマイズせずに、アクション スクリプトだけをロードして開始しましたか? 最新のアクション スクリプトと Emacs 23.1 を使用して実行したところ、上記の結果が得られました。M-x c-versionと の両方を表示5.31.3してテスト済み5.31.7(後者は Emacs 32.1 で配布されています)。

于 2009-10-01T20:27:26.927 に答える