7

uncrustify (ソースコードの美化ツール) を構成して、前の開き括弧の下に配置されないようにしようとしています。たとえば、コードを次のようにしたいと思います (ファイルから indent_paren.c):

void f(void)
{
    while (one &&
        two)
    {
        continue;
    }
}

上記のコードで uncrustify を実行すると、上記の行two) に合わせて行がインデントされます(

void f(void)
{
    while (one &&
           two)
    {
        continue;
    }
}

ソースからコンパイルされた uncrustify (0.59) の最新バージョンを使用しています。このテストでは、次の構成設定を使用しています (ファイル内indent_paren.cfg)。

indent_with_tabs = 0
indent_columns   = 4
indent_paren_nl  = false
indent_bool_paren = false

次のように uncrustify を呼び出しています。

uncrustify -c indent_paren.cfg indent_paren.c

バージョン 0.56 (Ubuntu 11.04 のリポジトリからインストール) でも同じ動作が見つかりました。間違った構成設定を使用していますか、それとも何か他の問題がありますか? 助けてくれてありがとう。

4

1 に答える 1

9

uncrustify のソース コードでさらに実験を行い、詳しく調べた結果、このindent_continueオプションはほとんどの場合、私が望んでいたことを実行することがわかりました。デフォルトでindent_continueは は 0 であり、継続する行は上の行の開き括弧の下までインデントされます。ゼロ以外の値に設定indent_continueすると、この動作がオーバーライドされ、現在の「レベル」に基づいて継続行がインデントされます。したがって、 uncrustify.cfg で次の設定を使用すると、元の例は必要に応じてインデントされます。

indent_with_tabs = 0
indent_columns   = 4
indent_continue  = 4

ただし、ネストされた括弧では「レベル」がインクリメントされるため、次のような場合に必要以上のインデントが発生します。

void g(void)
{
    /* Nested parentheses cause undesired additional indent. */
    TRACE(("The varargs need extra parentheses %d %d\n",
        (firstArgIsLong + 
        withMultipleTerms),
        secondArg));
}

上記の設定により、次のようにインデントが生成され、望ましくない余分なレベルのインデントが生成されます。

void g(void)
{
    /* Nested parentheses cause undesired additional indent. */
    TRACE(("The varargs need extra parentheses %d %d\n",
            (firstArgIsLong +
                withMultipleTerms),
            secondArg));
}

uncrustify ソースを見ると、この動作は調整できないようです。 indent_continueほとんどの場合、望ましい結果が得られます。現時点では uncrustify が最も近いようです。

于 2011-10-13T11:32:54.187 に答える