チームでコーディング規約を徹底する方法としてXcodeに整形させる方法があると思うのでメモ。
Uncrustifyを使う
Objective-Cのコード整形をするツールの一つとしてUncrustifyがある。Xcodeから実行するプラグインとしてBBUncrustifyPluginがあるのでこちらから利用する。BBUncrustifyPlugin 2.0.2ではuncrustify 0.60が同梱されている。
BBUncrustifyPlugin 2.0
インストール
- https://github.com/benoitsan/BBUncrustifyPlugin-Xcode/releases からダウンロード
-
UncrustifyPlugin.xcplugin
を~/Library/Application Support/Developer/Shared/Xcode/Plug-ins
にコピー - Xcodeを再起動
他の方法としてプロジェクトをcloneしてXcodeでビルドしてもインストールできる。git pull
+ ビルドでアップデートもできるのでこっちのがいいかも。
プラグインが認識されればXcodeに Edit > Format Code メニューが追加される。このメニューからは整形範囲として
- Format Selected Files (選択したファイルの整形)
- Format Active File (アクティブなファイルの整形)
- Format Selected Lines (選択した行の整形)
の3つが実行できる。稀に意図した整形にならないことがあるので個人的にはエディタで選択した行の整形(Format Selected Lines)を使うことが多い。
Formatterの設定
BBUncrustifyPlugin 2.0ではClangFormatも追加されているのでFormatterとしてUncrustifyを設定しておく必要がある。
Edit > Format Code > BBUncrustifyPlugin Preferences... を選択してFormatterに Uncrustify を選択する。
キーボードショートカットキーを設定する
OS X 10.9で Format Selected Lines メニューのショートカットキーを設定する例。
システム環境設定 > キーボード > ショートカットタブ > アプリケーション から + ボタンを押す。
項目 | 内容 |
---|---|
アプリケーション | Xcode |
メニュータイトル | Format Selected Lines |
キーボードショートカット | お好みで |
なんとなくAndroid Studio(IntellJ系)でReformat Codeのショートカットを Cmd + Opt + L に設定しているので揃えてる。
Uncrustify.cfgの作成
~/.uncrustify/uncrustify.cfg
に整形ルールを作成する。
デフォルトの設定ファイルは http://uncrustify.sourceforge.net/default.cfg
からダウンロードできる。
日本語での説明としては以下の記事が参考になる。
意識の高さからかコードフォーマッター設定を公開
プロジェクト毎に設定したい場合はプロジェクトディレクトリ(ソースファイルと同じディレクトリか親ディレクトリ)に uncrustify.cfg
を配置する方法もあるが未確認。
自分の規約に沿って作ったファイルを参考までに以下に公開。(前に作ったのを uncrustify --update-config-with-doc
で更新したものだけど作成途中だったような気もする)
https://gist.github.com/makotokw/9799874
チームではgistやリポジトリ管理したものを共有して各自が~/.uncrustify/uncrustify.cfg
に配置する。プロジェクト毎に作るのは面倒だがプロジェクトリポジトリに置いた方が良いのだろうか。良い運用方法があれば知りたい。
その他
- BBUncrustifyPlugin以外から使いたい場合などuncrustifyはHomebrewからもインストールできる。
brew install uncrustify
Usage Examples
cat foo.d | uncrustify -q -c my.cfg -l d
uncrustify -c my.cfg -f foo.d
uncrustify -c my.cfg -f foo.d -L0-2,20-23,51
uncrustify -c my.cfg -f foo.d -o foo.d
uncrustify -c my.cfg foo.d
uncrustify -c my.cfg --replace foo.d
uncrustify -c my.cfg --no-backup foo.d
uncrustify -c my.cfg --prefix=out -F files.txt
- ClangFormatも機会があれば調べてみたい。