clang-formatを弄る

投稿者: | 2020年5月12日
clang-format

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(英語)のいくつかの組み込みスタイルが用意されています。これらの定義済みスタイルは、そのまま使用することも、スタイル定義のカスタムセットのベースラインとして使用することもできます。

(CLion代替フォーマッタとしてのClangFormat)

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 ホームページのダウンロードページをご覧ください。

(プログラマーのための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 を導入してカスタマイズしたから取ってきたものです。

このような感じでスタイルオプションを記述していきます。

他にも色々あるので、

Clang 11 documentation

Algo13 ClangFormatスタイルオプション

def yasuharu519(self) clang-formatをイイ感じに設定する

を見ながら自分好みにカスタマイズすると良いと思います。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください