11

Xcode でフォーマットされたコードを再フォーマットしないようにする方法はありますか? または、ブロックを使用するソース コードをフォーマットできる uncrustify のようなツールはありますか?

Objective-C のブロックでは、コードが読みにくくなっています。1 つの解決策は、次のように、ブロック定義を書き出して、新しい行に中括弧を配置することです。

dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
    //block of code
});

と:

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop)
{
    //block of code
}];

美しく簡単!

しかし、Xcode はこの形式を保持しないため、この方法で uncrustify 出力コードを作成する方法が見つかりません。Uncrustify は非常に優れていますが、ブロックが新しすぎるのではないでしょうか?

何か案は?

[免責事項: これが「トロールアワー」になる可能性があることは承知していますが、コードはできるだけ読みやすくする必要があり、同じ列に中括弧があると、(私にとっては) より明確になります。特に、ブロック内に複数のブロックがある場合。したがって、このようなコードが気に入らない場合は、質問を無視してください。]

4

2 に答える 2

3

uncrustify への最新 (約 2 か月前) の更新により、問題はほぼ解決されます。構成ファイルに次の項目を設定するだけです。

indent_oc_block                          = true 
indent_with_tabs                         = 0        
indent_columns                           = 4        # set to the same as indent_switch_case
indent_switch_case                       = 4        # set to the same as indent_columns

(タブで動作させることができなかったので、 indent_with_tabs = 0 を使用しました。おそらく必要ありません。)

そしてもちろん、{} の後/前の新しい行では、nl_some_parameter_brace に必要なすべてを「強制」に設定します。

uncrustify がコードを処理し、新しい行をブロックに挿入しません。次のようなコードは醜いままです:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) {
    //code
}

改行を適切に挿入する方法を誰かが見つけたら、教えてください。

uncrustify の更新について @ipmcc に感謝します。

編集: はい、xCode は、コピー/貼り付けするたびにコードを難読化します。ワークフローを容易にするために、この優れた xCode プラグインを使用します: https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

編集 2: Uncrustify はネストされたブロックをうまく処理できません (それでも Xcode よりは優れています)。たとえば、ネストされたブロックは次のようになります。

dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
    [array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
        {
            [array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
                {
                    NSLog(@"the pumpkin pie!");
                }];
        }];
});
于 2013-03-17T10:21:40.420 に答える
-1

XCode は、オートコンプリートに組み込みの「コード スニペット」を使用します。{}ライブラリ ペインの アイコンをクリックして、コード スニペット ライブラリを開きます。スニペットを XCode 内で直接編集することはできませんが、アプリSnippetEditを使用すると編集できます。

編集する前に、'codesnippets' ファイルのバックアップを作成することをお勧めします。にあります/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets

于 2013-02-13T19:31:40.957 に答える