clang-formatを入れたのですが、なんか自動整形が合わないなと思ってました。
さて、clang-formatですが色々弄れるようです。ぐぐったら色んな人の.clang-formatが出てきます。
そういうことで、ABCの解説聞きながら調べてたことをメモしていきます。
使用プラグイン:clang-format
Atomのプロジェクトのルートディレクトリに.clang-formatを置くとこちらが優先されて適用されます。
私はアホなのでルートディレクトリとはなんぞや?って思いましたが、Atomに追加したプロジェクトフォルダの一番上の階層のことです。ツリータブで表示した時の一番上のところ。
そして、clang-formatとはなんぞやといえば、次の通り。
フォーマット規則を持つ.clang-format ファイルは、プロジェクトツリーに配置する必要があります。それらはそれぞれ、同じレベルおよびサブディレクトリ内のコードファイルに適用されます。1つのプロジェクトに対して複数の .clang-format ファイルを用意することで、必要に応じて、コードフォルダーごとに異なるスタイルを使用できます。ClangFormatには多くのスタイルオプションがあり(英語)、組み合わせてチームに最適なルールセットを作成できます。また、C/C++には、LLVM(英語)、Google(英語)、Webキット(英語)、Chromium(英語)、およびMozilla(英語)のいくつかの組み込みスタイルが用意されています。これらの定義済みスタイルは、そのまま使用することも、スタイル定義のカスタムセットのベースラインとして使用することもできます。
YAMLファイルに書き込んで込めばいいですが、引用にも示したとおり、組み込みスタイルが用意されているので、それをカスタマイズして自分独自のフォーマッタに仕上げられます。もちろん、組み込みスタイルを使わなくても作れます。
要するに、僕の考えた最強のフォーマッタを作ろうというものです。
YAMLってなんだと思ったのですが、次の通りらしい。
YAML (YAML Ain’t Markup Language) とは、構造化されたデータを表現するためのフォーマットです。YAML は次のような用途に向いています。
- 各種設定ファイル
- データ保存用 (シリアライゼーション)
- データ交換用フォーマット
- ログファイル
YAML の目的は XML と似ていますが、XML と比べて次のような利点があります (YAML と XML との詳しい比較はセクション『XML との比較』をご覧ください)。
- 読みやすい ―― YAML ではインデントを使ってデータの階層構造を表すため、人間にとって非常に読みやすいです。
- 書きやすい ―― YAML では XML のような終了タグが必要ないので、人間にとって非常に書きやすいです。
- わかりやすい ―― YAML ではデータを「配列」「ハッシュ」「スカラー (数値や文字列や真偽値)」だけで表すため、人間にとって非常に理解しやすく、またプログラミングも容易です。
YAML の仕様では、正式には配列ではなく「シーケンス (Sequence)」、ハッシュではなく「マッピング (Mapping)」という用語を使用しています。これは、「配列」や「ハッシュ」という用語がデータ構造の具体的な実装を表すため、仕様書で使うのはふさわしくないと判断されたのだと思われます。しかし本稿ではわかりやすさを優先して、Ruby ユーザになじみの深い「配列」や「ハッシュ」を用語として使用します。正式な用語については、YAML の仕様書である『YAML Ain’t Markup Language Version 1.1』をご覧ください。
また YAML はあくまで「仕様」であり、それを処理するライブラリの「実装」が必要です。Ruby 1.8 では Syck というライブラリが標準で含まれています。Syck の本体は C 言語で書かれており、それを Ruby などのスクリプト言語から使えるようになっています。現時点では Syck は以下の言語に対応しています (対応状況については、Ruby 以外の言語ではまだ使えない機能も多いみたいです)。
- Ruby
- Python
- PHP
OCaml〔追記 (2005-09-28) OCamlのサポートはなくなりました。また新たに Lua と Cocoa がサポートされたようです。〕
そのほかの実装については YAML ホームページのダウンロードページをご覧ください。
言葉で書かれると微妙ですが、.clang-formatを作るときには知らなくてもいいです。
とりあえず、私が適当に作った.clang-formatは次のようになっています。
BasedOnStyle: Google # ここを上記の別のスタイルにすることで変えられる
# ここから自分の好みのオプションを指定する
IndentWidth: 4
Language: Cpp
Standard: Cpp11
TabWidth: 4
UseTab: Never
AccessModifierOffset: -2
AlignConsecutiveAssignments: false
AlignTrailingComments: true
AllowShortBlocksOnASingleLine: true
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: true
コードの大本はプログラマになりたい人生 clang-format を導入してカスタマイズしたから取ってきたものです。
このような感じでスタイルオプションを記述していきます。
他にも色々あるので、
def yasuharu519(self) clang-formatをイイ感じに設定する
を見ながら自分好みにカスタマイズすると良いと思います。