uncrustifyおかわり
はじめに
uncrustifyはObjective-Cに対応したソースコードの整形ツールです。
以前にCocoa勉強会での発表時から時間がたち、uncrustifyのObjective-C対応が進みました。 また、XCodeのバージョンも進みuncrustifyを呼び出す方法が変わりました。
現在のuncrustifyとXCodeのバージョンにあった設定と手法を紹介します。
開発環境
開発環境は以下の通りです
MacOSX: | 10.8.2 |
---|---|
XCode: | 4.5.2 |
uncrustify: | 0.59 |
インストール
MacPortsにパッケージがありますので、これを使います。インストール方法は以下の通りです。
$ sudo port install uncrustify
主な使用方法
uncrustifyは単純なコマンドラインのプログラムです。 以下の様にして、整形したいファイルを指定するだけです。
$ uncrustify [options] [files ...]
主に使うオプションは以下の通りです。
-c CFG | 設定ファイルCFGを使う |
-f FILE | FILEを入力ファイルとして扱う |
-o FILE | 出力をFILEに書き出す。 |
-F FILE | FILEに1行毎にファイルパスを書いておくと一括で処理。 |
--replace | 入力ファイルを出力結果で置換える。(バックアップは取る) |
--no-backup | 入力ファイルを置換えてバックアップは取らない。 |
-l OC | 言語の指定。Objective-CはOC、Objective-C++はOC+。 |
整形フォーマットは設定ファイルで指定します。
設定ファイルの設置
MacPortsでインストールした場合は、”/opt/local/share/uncrustify/”に設定ファイルのサンプルがおいてあります。 これらの設定をコピペして変更しながら使うとお好みの形式に近づけられます。
設定ファイルの項目数は400個くらいあります。全体を眺めるのに必要な略語を以下に示します。
略語一覧
略語 | 意味 |
---|---|
indent | 行の最初のインデント関連 |
sp | 要素間の空白関連 |
align | 桁揃え関連。変数宣言等で型と変数名を縦方向にそろえるとか |
nl | 改行関連 |
mod | 順序をsortしたり、{}を追加したり等の コードを変更をする |
cmd | コメントの中身の改変 |
pp | プリプロセッサ関連 |
oc | Objective-C関連 |
Objective-Cに関連する項目を次の表に示します。 sp_xxxx系の項目はお好みで。
項目 | 設定値 |
---|---|
sp_before_oc_colon | メッセージ式の’:’の前に空白を挿入/削除する |
sp_after_oc_colon | -(int) f:(int) x;と-(int) f: (int) x;の様に:と型名の間にスペースを入れるか否か |
sp_after_oc_scope | -(void)foo;や+(int)bar;の+-等の記号の後にスペースを入れるか否か |
sp_after_oc_type | メッセージ式の引数の型名の後に空白を挿入/削除する |
sp_after_oc_return_type | -(void) foo;等の型と関数名の間にスペースを入れるか否か |
sp_before_send_oc_colon | ‘[object setValue:1];’ vs ‘[object setValue :1];’これremoveじゃないとダメだろ |
sp_after_send_oc_colon | ‘[object setValue:1];’ vs ‘[object setValue: 1];’普通は左側 |
sp_after_oc_at_sel | ‘@selector(msgName)’ vs ‘@selector (msgName)’‘普通は左側 |
sp_before_oc_block_caret | ‘^int (int arg){…}’ vs. ‘ ^int (int arg){…}’ |
sp_after_oc_block_caret | ‘^int (int arg){…}’ vs. ‘^ int (int arg){…}’ |
align_oc_msg_colon_span | # Obj-C message on the ‘:’ but stop after this many lines (0=don’t align) |
align_oc_msg_spec_span | # the span for aligning ObjC msg spec (0=don’t align) |
align_oc_decl_colon | # Aligning parameters in an Obj-C ‘+’ or ‘-‘ declaration on the ‘:’ |
コマンドラインからの使い方
MacPortsでインストールした場合は、”/opt/local/share/uncrustify/”に設定ファイルのサンプルがおいてあります。 以下のような感じで”/opt/local/share/uncrustify/”以下の設定ファイルを色々と試して、好みに近い物を探すと最初から設定ファイルを手書きするより楽です。
$ uncrustify -l OC -c /opt/local/share/uncrustify/kr-indent.cfg testClass.m
実行するとtestClass.m.uncrustifyが出来たと思いますので、diffをとって変更された箇所を確認してください。
さらに、以下のようにopeddiffすればビジュアルに変更点を確認出来きて便利です。
$ uncrustify -l OC -c /opt/local/share/uncrustify/kr-indent.cfg testClass.m
$ opendiff testClass.m testClass.m.uncrustify
FileMerge.appが開いてこんな感じになります。
XCode4からの使い方
XCode3の時に使えたScriptMenuが使えなくなったので、以下の2種類の方法があるようです。
- サービスメニューからAppleScriptかAutometerを使う
- http://blog.carbonfive.com/2011/03/10/code-formatting-in-xcode-4/
残念ながら私には能力が無いのでどちらも試していません。 XCodeのビヘイビアもAppleScriptもAutometrも全部使った事が無いのです。
そのうち試して追記します。
参考文献
- 公式サイト
- http://uncrustify.sourceforge.net/
- オプションの日本語解説
- http://www.6809.net/tenk/?PG%BB%A8%B5%AD%2fUncrustify%A4%CE%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3
- 設定ファイルの例
- https://github.com/tonyarnold/energon/blob/master/uncrustify.cfg https://github.com/tonyarnold/energon/commits/master/uncrustify.cfg https://gist.github.com/954967