Uncrustifyの設定メモ

参考までにUncrustifyの設定ファイルを置いときます。

defaultからの変更は、以下の3つ。

  • Objective-Cの最低限の対応
  • bsd/allmanスタイルのindent
  • 変数のアライメントの揃え

( uncrustify.cfg.zip )

DoxygenとXCodeのコメント機能のメモ

1行あけて記述すると詳細な説明のコメント部分になる、javadoc形式のautobriefを使うとコメントが描きやすい。

JAVADOC_AUTOBRIEF      = YES

デフォルトだと、プライベートな実装までドキュメント化されてしまうので、ヘッダファイルだけコメント摘出したほうが良い。

FILE_PATTERNS          = *.h

Xcodeでは、主な構文の前で、”command + option + /”のショートカットキーでコメントの雛形が挿入される。

例:class

雛形の挿入をサポートしている。

/**
 クラスの概要

 1行あけてから、クラスの主な機能をかく。
 - 何の動作に責任を持つか?
 - 実行時に協調するクラスはどれか?
  */
@interface DXWBAppDelegate : NSObject <NSApplicationDelegate>

@end

なお、ObjCでは”-“などのmarkDown構文はXCodeのQuickHelpではサポートされていない。doxygenだとサポートされている。

例:method

雛形の挿入をサポートしている。

/**
 引数inRangeで示す文字列範囲の描画座標を矩形NSRectを返す

 @param inRange 指定する文字列の範囲
 @return 文字列の描画範囲

 ここに詳細な説明を入れる。
*/
- (NSRect) rectForCharacterRange:(NSRange)inRange;

例:property

雛形の挿入をサポートしている。

/**
 Textの描画領域とboundsの差の値
 */
@property (readonly) NSSize interSpacing;

空白行に続けて詳細は書ける。しかし、propertyに詳細な説明が必要な場合は設計が間違っている可能性があるので見直したほうが良い。

例:enum

雛形の挿入をサポートしていない。列挙体全体だけでなく、ここの値でも雛形の挿入はサポートされていない。

自前で、コメントをつける必要があるので、以下のコードを参考にする。 “/**”と”///”を使い分けると見た目がキレイになる。

/**
 DXWBAppDelegateに関わるエラー定数。

 ここに詳細な説明を入れる。
 */

enum E_DXWBAppDelegateError
{
    /// 読み込みエラー
    DXWBAppReadInapplicableDocumentTypeError,

    /// 書き出しエラー
    DXWBAppWriteInapplicableDocumentTypeError
};

例:文字列定数

雛形の挿入をサポートしていない。自前で、コメントをつける必要があるので、以下のコードを参考にする。

/**
 NSString定数の宣言
 */
extern NSString* const DXWBAppConstString;

文字列定数に詳細な説明が必要な場合は設計が間違っている可能性があるので見直したほうが良い。

例:マクロ

雛形の挿入をサポートしていない。自前で、コメントをつける必要があるので、以下のコードを参考にする。

/**
 NSApp.delegateへのアクセッサ
 */
#define AppDelegate ((DXWBAppDelegate *)[NSApp delegate])

文字列定数や列挙型をclassと同じグループにまとめる

Objective-Cでは、同じファイルで定義されている文字列定数や列挙型は、同じファイル中のクラスと強く関連づけられています。

それを明示するために、以下のように、”//@{“と”//@}”でくくるとDoxygenでグループ付けしてくれます。

//@{

// マクロ
 .
 .
// クラス定義
 .
 .
// 文字列定数
 .
 .
//@}

( doxygenWorkBench_2.zip )

uncrustifyもういっぱい

はじめに

以前 uncrustifyおかわり で紹介したように、uncrustifyはObjective-Cに対応したソースコードの整形ツールです。 XCodeからuncrustifyを呼び出すuncrustifierというExtensionが公開されています。

今回は、そのuncrustifierの紹介です。

環境

uncrustifyは、macPortsで構築した。

  • macosx 10.12.4
  • xcode 8.3.1
  • MacPorts 2.4.1
  • uncrustify 0.64
  • uncrustifier 1.2

uncrustifierのインストール

ここから https://github.com/yieldmo/uncrustifier/releases バイナリを持ってきて適当な箇所にコピーするのが一番簡単。

ソースコードからビルドする場合は、https://github.com/yieldmo/uncrustifier でコードを持ってくる。

インストール自体は、ビルド後に出来上がったアプリケーションを立ち上げると自動でインストールされる。

uncrustifierの設定

uncrustifierアプリを立ち上げて、スタイルを選ぶ。

../../../_images/uncrustifyIcon.png

Windowが1つだけのアプリでここでスタイルが設定できる。

../../../_images/uncrustifyPrefarenceWindow.png

“システム環境設定” > “機能拡張” > “Xcode Source Editor” でuncrustifyにチェックを入れて有効にする。

../../../_images/uncrustifySystemPref.png

Note

Resources以下のファイルを書き換えると、デフォルトの設定を変更できるとの公式サイトに載っている。 しかし、uncrustifierの設定の設定画面で、PopupMenuから”Custom File…”を選べばappexのリソースを直接変更するような事をしなくても変更できる。ただし、設定ファイルの内容を変更するたびに読み込ませる必要がある。

XCodeからの使い方

メニューからの呼び出し方は、 “Editor” > “uncrustify” > “Format Current Document” で呼び出せる。 編集中のドキュメントを対象に整形する。

ショートカットキーは、各自が適当につける。設定方法は、”XCode” > “Prefarences…” > “Key Bindings”の画面で行う。

“uncrustify”でフィルターすると対象のメニューが出るのでお好みのショートカットをつけると良い。

../../../_images/uncrustifyKeyBindings.png

Doxygenの設定メモの続き

参考にしたサイトでは自動化にsedを使っていたが、私にはsedの文法が分からない。 diffとpatchで対応することにした。

doxygen出力ディレクトリ

出力ディレクトリは、以下を前提としています。

OUTPUT_DIRECTORY       = "build/doxygen"

patchファイル

以下のzipファイルの”doxygen-latex.patch”にパッチファイルを用意した。

( doxygenWorkBench.zip )

コマンド実行

パッチの適応と、pdfの作成。

$ doxygen
$ patch -p0 < doxygen-latex.patch
$ cd build/doxygen/latex
$ make pdf

あとは、適当にソースのビルド時に上記のスクリプトを追加すれば良さそう。