mcpField
C
cpp-include-sorter

cpp-include-sorter

github.com/openharmonyinsight開発3591 回インストール11 週間前に更新
リポジトリ

cpp-include-sorter について

C/C++プロジェクト向けに、インクルードを分類して並べ替えるコード整理スキルです。条件付きコンパイルブロックを扱い、コメントを保ち、ヘッダーの欠落を検証します。

主な機能

  1. 01対応ヘッダー、システム、ローカルに分類
  2. 02条件ブロック単位で並べ替え
  3. 03条件ブロック内のヘッダーも整列
  4. 04コメントを保持しヘッダー数を検証
  5. 05ファイルを変更せずにプレビュー

活用シーン

  1. 01ディレクトリ内のC/C++ソース整理
  2. 02#ifdefや#elseを含むインクルードの整列
  3. 03編集前の変更内容の確認
  4. 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 つのカテゴリに分類され、各グループの間には空行が入ります:

  1. 対応するヘッダー - file.cpp の場合、file.h を最初に配置します(重複がある場合は最も長いパスを優先します)
  2. システムヘッダー - 山括弧 <> を使用するヘッダー(アルファベット順)
  3. ローカルヘッダー - 二重引用符 "" を使用するヘッダー(アルファベット順)
条件付きコンパイルブロック

#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() - 並べ替えたインクルードで条件付きブロックを整形します

検証

並べ替え後、次の点を確認してください:

  1. すべての #ifdef ブロックに、変更前と同じ数のヘッダーが含まれている
  2. 対応するヘッダーのパスが完全である(短縮されていない)
  3. インクルードの合計数が変わっていない
  4. コメントが保持されている

変更前と変更後を比較するには、git diff を使用します:

git diff <file.cpp> | grep "^[-+]" | grep "include"

コメント