Edited at

コーディング規約を徹底するXcode + Uncrustifyでコード整形

More than 5 years have passed since last update.

チームでコーディング規約を徹底する方法としてXcodeに整形させる方法があると思うのでメモ。


Uncrustifyを使う

Objective-Cのコード整形をするツールの一つとしてUncrustifyがある。Xcodeから実行するプラグインとしてBBUncrustifyPluginがあるのでこちらから利用する。BBUncrustifyPlugin 2.0.2ではuncrustify 0.60が同梱されている。


BBUncrustifyPlugin 2.0


インストール



  1. https://github.com/benoitsan/BBUncrustifyPlugin-Xcode/releases からダウンロード


  2. UncrustifyPlugin.xcplugin~/Library/Application Support/Developer/Shared/Xcode/Plug-ins にコピー

  3. Xcodeを再起動

他の方法としてプロジェクトをcloneしてXcodeでビルドしてもインストールできる。git pull + ビルドでアップデートもできるのでこっちのがいいかも。

プラグインが認識されればXcodeに Edit > Format Code メニューが追加される。このメニューからは整形範囲として



  • Format Selected Files (選択したファイルの整形)


  • Format Active File (アクティブなファイルの整形)


  • Format Selected Lines (選択した行の整形)

の3つが実行できる。稀に意図した整形にならないことがあるので個人的にはエディタで選択した行の整形(Format Selected Lines)を使うことが多い。

2014-03-27_1401.png


Formatterの設定

BBUncrustifyPlugin 2.0ではClangFormatも追加されているのでFormatterとしてUncrustifyを設定しておく必要がある。

Edit > Format Code > BBUncrustifyPlugin Preferences... を選択してFormatterに Uncrustify を選択する。

BBUncrustifyPlugin_Preferences.png


キーボードショートカットキーを設定する

OS X 10.9で Format Selected Lines メニューのショートカットキーを設定する例。

システム環境設定 > キーボード > ショートカットタブ > アプリケーション から + ボタンを押す。

keyboard.png

項目
内容

アプリケーション
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も機会があれば調べてみたい。