cpp-include-sorter について
C/C++プロジェクト向けに、インクルードを分類して並べ替えるコード整理スキルです。条件付きコンパイルブロックを扱い、コメントを保ち、ヘッダーの欠落を検証します。
主な機能
- 01対応ヘッダー、システム、ローカルに分類
- 02条件ブロック単位で並べ替え
- 03条件ブロック内のヘッダーも整列
- 04コメントを保持しヘッダー数を検証
- 05ファイルを変更せずにプレビュー
活用シーン
- 01ディレクトリ内のC/C++ソース整理
- 02#ifdefや#elseを含むインクルードの整列
- 03編集前の変更内容の確認
- 04並べ替えによるヘッダー欠落の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ openharmonyinsight/ openharmony-skills --skill cpp-include-sorterインストール後、Claude Code で/cpp-include-sorterを入力して読み込まれたか確認します。
同梱ファイルscripts/sort_includes.py
詳細
C/C++ インクルードソーター
条件付きコンパイルブロックをインテリジェントに処理しながら、C/C++ ソースファイル内の #include 文を自動的に並べ替えます。
クイックスタート
ディレクトリ内のすべての .cpp ファイルを並べ替えます:
python scripts/sort_includes.py <directory-path>
ファイルを変更せずに変更内容をプレビューします:
python scripts/sort_includes.py <directory-path> --dry-run
並べ替えルール
インクルードは3 つのカテゴリに分類され、各グループの間には空行が入ります:
- 対応するヘッダー -
file.cppの場合、file.hを最初に配置します(重複がある場合は最も長いパスを優先します) - システムヘッダー - 山括弧
<>を使用するヘッダー(アルファベット順) - ローカルヘッダー - 二重引用符
""を使用するヘッダー(アルファベット順)
条件付きコンパイルブロック
#ifdef/#ifndef/#if defined ブロックは一つの単位として扱われます:
- ブロックは、最初のインクルードに基づいて全体の並べ替えに参加します
- 各ブロック内のヘッダーも並べ替えられます(最初にシステムヘッダー、次にローカルヘッダー)
- ブロック構造(
#ifdef...#endif)は保持されます #elifおよび#elseブロックに対応しています
例
変更前:
#include "common/rs_log.h"
#include "rs_trace.h"
#include <memory>
#ifdef RS_ENABLE_GPU
#include "feature/uifirst/rs_sub_thread_manager.h"
#include "feature/capture/rs_ui_capture_task_parallel.h"
#endif
#include "platform/common/rs_system_properties.h"
変更後:
#include "rs_trace.h" // 1. Corresponding header (longest path preferred)
#include <memory> // 2. System headers (alphabetical)
#include "common/rs_log.h" // 3. Local headers (alphabetical)
#ifdef RS_ENABLE_GPU
#include "feature/capture/rs_ui_capture_task_parallel.h"
#include "feature/uifirst/rs_sub_thread_manager.h"
#endif
#include "platform/common/rs_system_properties.h"
機能
- 重複するインクルードの処理:同じファイル名でパスが異なるインクルード(例:
"file.h"と"path/to/file.h")が複数ある場合、最も長いパスを対応するヘッダーとして使用し、最初に配置します - コメントの保持:インラインコメント(
// comment)と前置コメントを保持します - ネストした条件付きブロック:
#ifdefブロック内の#elifおよび#elseを処理します - 検証:並べ替え中にヘッダーが失われていないことを確認します
スクリプトのリファレンス
実装の詳細については、scripts/sort_includes.py を参照してください。
主な関数:
extract_includes_with_ifdef()- インクルードと条件付きブロックを解析しますsort_includes_with_ifdef()- 3 カテゴリのルールで並べ替えますformat_ifdef_block()- 並べ替えたインクルードで条件付きブロックを整形します
検証
並べ替え後、次の点を確認してください:
- すべての
#ifdefブロックに、変更前と同じ数のヘッダーが含まれている - 対応するヘッダーのパスが完全である(短縮されていない)
- インクルードの合計数が変わっていない
- コメントが保持されている
変更前と変更後を比較するには、git diff を使用します:
git diff <file.cpp> | grep "^[-+]" | grep "include"
コメント
Markdown 対応