cpp-include-sorter
SKILL.md
C/C++ Include Sorter
Automatically sorts #include statements in C/C++ source files with intelligent handling of conditional compilation blocks.
Quick Start
Sort all .cpp files in a directory:
python scripts/sort_includes.py <directory-path>
Preview changes without modifying files:
python scripts/sort_includes.py <directory-path> --dry-run
Sorting Rules
Includes are organized into 3 categories with blank lines between each group:
- Corresponding header - For
file.cpp,file.his placed first (prefers longest path if duplicates exist) - System headers - Headers with angle brackets
<>(sorted alphabetically) - Local headers - Headers with double quotes
""(sorted alphabetically)
Conditional Compilation Blocks
#ifdef/#ifndef/#if defined blocks are treated as units:
- Blocks participate in global sorting based on their first include
- Headers inside each block are also sorted (system headers first, then local headers)
- Block structure (
#ifdef...#endif) is preserved #elifand#elseblocks are supported
Example
Before:
#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"
After:
#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"
Features
- Duplicate include handling: When multiple includes with same filename but different paths exist (e.g.,
"file.h"and"path/to/file.h"), the longest path is used as the corresponding header and placed first - Comment preservation: Inline comments (
// comment) and preceding comments are preserved - Nested conditional blocks: Handles
#elifand#elsewithin#ifdefblocks - Validation: Verifies no headers are lost during sorting
Script Reference
See scripts/sort_includes.py for implementation details.
Key functions:
extract_includes_with_ifdef()- Parses includes and conditional blockssort_includes_with_ifdef()- Sorts with 3-category ruleformat_ifdef_block()- Formats conditional blocks with sorted includes
Verification
After sorting, verify:
- All
#ifdefblocks contain same number of headers as before - Corresponding header has complete path (not shortened)
- Total include count unchanged
- Comments preserved
Use git diff to compare before/after:
git diff <file.cpp> | grep "^[-+]" | grep "include"
Weekly Installs
29
Repository
openharmonyinsi…y-skillsGitHub Stars
3
First Seen
Feb 10, 2026
Security Audits
Installed on
opencode26
gemini-cli21
github-copilot21
amp21
codex21
kimi-cli21