Windows (Msys2)でclang-formatを使う

Windows (Msys2) 環境でclang-formatを使う方法


インストール

Msys2での導入は簡単。pacmanコマンドで一発

% pacman -S pacman -S mingw-w64-x86_64-clang

設定

基本はgoogle style guideにならいます。-style=googleで指定できるけど、毎回設定するのは面倒なのでプロジェクトのトップフォルダに.clang-formatファイルを置いておきます。設定ファイルは遡って検索してくれるので便利です

% clang-format -style=google -dump-config > .clang-format
% vi .clang-format #好みに合わせて微調整
@@ -50,12 +50,12 @@
-ColumnLimit:     80
+ColumnLimit:     120
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
 ConstructorInitializerAllOnOneLineOrOnePerLine: true
-ConstructorInitializerIndentWidth: 4
-ContinuationIndentWidth: 4
+ConstructorInitializerIndentWidth: 2
+ContinuationIndentWidth: 2

実行

実際の整形はファイルを指定してclang-formatを実行するだけです。オプションなしで実行すると、結果を標準出力に表示します。-iオプションでファイルを上書きしてくれます。上書きする前にはgit addで一時保存しておくといいと思います

// clang_format.cc 元コード
#include <string>
#include <iostream>

int main(int argc, char** argv) {
  std::cout << "Hello World! (number of option:" << argc << ")" << std::endl;

if (argc>1) {
    return -1;
  } else {
    return 0;
  }
}
% clang-format -i clang_format.cc
% git diff clang_format.cc
--- a/clang_format.cc
+++ b/clang_format.cc
@@ -1,10 +1,10 @@
-#include <string>
 #include <iostream>
+#include <string>^M

 int main(int argc, char** argv) {
   std::cout << "Hello World! (number of option:" << argc << ")" << std::endl;

-if (argc>1) {
+  if (argc > 1) {^M
     return -1;
   } else {
     return 0;

おすすめ