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)
bash
# Format all C++ and Dart code (will auto-commit) ./format.sh # Format without auto-commit ./format.sh s
The script formats:
- •All
.hand.cppfiles insrc/,include/,tests/ - •All Dart files in the project
- •Uses project's
.clang-formatconfiguration
Manual Formatting
bash
# 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
bash
cat .clang-format
Code Style Checking
bash
# 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
bash
# 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
bash
git diff --cached --name-only --diff-filter=ACM | \ grep -E '\.(cpp|h|cc|hpp)$' | \ xargs clang-format -i
Common Issues & Solutions
1. Format Breaks Code Structure
- •Check: Verify
.clang-formatconfiguration - •Check: Ensure clang-format version matches team standard
- •Workaround: Use
// clang-format offand// clang-format onfor special blocks
2. 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
3. Format Conflicts Between Developers
- •Ensure: All use same
.clang-formatfile - •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.shover 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
bash
# 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/