Skip to content

ソースを .clang-format に合わせて一括 reformat する (#63 の事前準備) #74

@thawk105

Description

@thawk105

背景

#63 で CI に clang-format の dry-run チェックジョブを追加する予定。その「## 事前確認」に従い、CI チェックを入れる前に現状の全ソースが .clang-format で diff を出さないか確認した結果、現状コードはリポジトリ直下の .clang-format に適合していないことが判明した。このまま #63 の CI チェックを入れると全面的に赤になるため、先に一括 reformat が必要。

.clang-format 自体のリファイン PR が別途進行中。それが merge されたら本検査は再実施が必要。

検査方法

  • clang-format バージョン: Ubuntu clang-format version 14.0.0-1ubuntu1.1
  • 検査対象: third_party/ と build 生成物 (cc/*/build/.../CMakeCXXCompilerId.cpp) を除く cc/ include/ common/ 配下の *.cc / *.hh / *.cpp — 計 240 ファイル
  • 対象抽出:
    find cc include common -type f \( -name '*.cc' -o -name '*.hh' -o -name '*.cpp' \) | grep -v '/build/'
  • 各ファイルに対し:
    clang-format --dry-run --Werror <file>
    違反規模は clang-format <file> | diff <file> - | grep -c '^[<>]' で diff 行数を計測。

検査結果

  • 違反ファイル数: 216 / 240 (適合は 26 ファイルのみ)
  • diff 行数合計: 約 36,700 行

規模の大きい top 15:

diff 行数 ファイル
2518 include/bomb_pessimistic.hh
2307 include/bomb.hh
962 common/result.cc
883 cc/tictoc/transaction.cc
836 cc/si/transaction.cc
800 cc/silo/transaction.cc
792 include/tpcc/tpcc_initializer.hh
725 cc/oze/include/transaction.hh
721 include/dbomb_deterministic.hh
699 cc/oze/transaction.cc
674 include/tpcc/tpcc_tables.hh
528 cc/ss2pl/transaction.cc
475 include/tpcc/tpcc_query.hh
460 include/masstree_wrapper.hh
429 include/tpcc/tpcc_tx_neworder.hh

ほぼ全プロトコル・全共通ヘッダにまたがって違反が出ている。

提案

  • 対象 240 ファイルに clang-format -i を機械適用する一括 reformat PR を別途出す。
  • reformat は機械適用なのでロジック変更は無く、レビュー負荷は低い (diff 量は多いが目視確認は不要)。
  • 順序: 先にこの reformat PR を merge し、その後に CI に clang-format dry-run チェックジョブを追加 #63 の CI dry-run チェックジョブを入れるのが正しい。逆順だと CI に clang-format dry-run チェックジョブを追加 #63 が即赤になる。
  • なお .clang-format 自体のリファイン PR が進行中のため、reformat PR はそれの merge 後に実施する (リファイン後の .clang-format で再検査 → reformat) のが望ましい。タイミングは要調整。

完了条件

  • 対象 240 ファイル全てで clang-format --dry-run --Werror がエラーを出さない (緑)。

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions