C++ Code Formatter
Purpose
This skill helps format Sanmill's C++ code to ensure code style consistency and maintainability across the codebase.
Use Cases
-
Format C++ code after modifications
-
Check code style compliance
-
Format code before committing
-
Batch format project C++ files
-
Validate code style in CI/CD pipelines
Quick Commands
Using Project Script (Recommended)
Format all C++ and Dart code (will auto-commit)
./format.sh
Format without auto-commit
./format.sh s
The script formats:
-
All .h and .cpp files in src/ , include/ , tests/
-
All Dart files in the project
-
Uses project's .clang-format configuration
Manual Formatting
Format single file
clang-format -i src/position.cpp
Format multiple files
clang-format -i src/.cpp src/.h
Check without modifying (dry-run)
clang-format --dry-run --Werror src/position.cpp
Configuration
Project Configuration Files
-
.clang-format
-
C++ formatting rules (project root)
-
CPPLINT.cfg
-
Code style checking rules
-
.editorconfig
-
Editor-specific settings
View Current Configuration
cat .clang-format
Code Style Checking
Check specific file with cpplint
cpplint --config=CPPLINT.cfg src/position.cpp
The configuration file defines which checks to enable/disable
Git Integration
Pre-commit Workflow
1. Make code changes
2. Format code
./format.sh s
3. Review changes
git diff
4. If correct, commit
git add . git commit -m "Your commit message"
Format Only Staged Files
git diff --cached --name-only --diff-filter=ACM |
grep -E '.(cpp|h|cc|hpp)$' |
xargs clang-format -i
Common Issues & Solutions
- Format Breaks Code Structure
-
Check: Verify .clang-format configuration
-
Check: Ensure clang-format version matches team standard
-
Workaround: Use // clang-format off and // clang-format on for special blocks
- Batch Formatting Creates Large Changes
-
Solution: Format in batches and commit separately
-
Label: Use clear commit message like "style: Format C++ code"
-
Communicate: Notify team members to sync
- Format Conflicts Between Developers
-
Ensure: All use same .clang-format file
-
Ensure: All use same clang-format version
-
Establish: Team formatting conventions
Best Practices
-
Format frequently: Format after each significant change
-
Format before commits: Always format before committing
-
Review formatting changes: Don't blindly commit formatting
-
Use project script: Prefer ./format.sh over manual commands
-
Separate formatting commits: Keep formatting separate from logic changes
-
Don't hand-edit formatting: Let tools do the work
Tools Required
clang-format
Check if installed
clang-format --version
Install on Ubuntu/Debian
sudo apt-get install clang-format
Install on macOS
brew install clang-format
cpplint (Optional)
For additional style checking beyond formatting.
Output Format
Formatting operations should report:
-
✓ Files formatted successfully
-
⚠ Files with style violations
-
✗ Files that failed to format
-
📊 Total files processed
-
💡 Style improvement recommendations
Reference Resources
-
Configuration: .clang-format , CPPLINT.cfg , .editorconfig (project root)
-
Format script: format.sh (project root)
-
clang-format docs: https://clang.llvm.org/docs/ClangFormat.html
-
C++ source locations: src/ , include/ , tests/