mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
- agents: cpp-build-resolver, cpp-reviewer - commands: cpp-build, cpp-review, cpp-test - rules: cpp/ (coding-style, hooks, patterns, security, testing) - tests: 9 new hook test files with comprehensive coverage Cherry-picked from PR #436.
133 lines
3.4 KiB
Markdown
133 lines
3.4 KiB
Markdown
---
|
|
description: Comprehensive C++ code review for memory safety, modern C++ idioms, concurrency, and security. Invokes the cpp-reviewer agent.
|
|
---
|
|
|
|
# C++ Code Review
|
|
|
|
This command invokes the **cpp-reviewer** agent for comprehensive C++-specific code review.
|
|
|
|
## What This Command Does
|
|
|
|
1. **Identify C++ Changes**: Find modified `.cpp`, `.hpp`, `.cc`, `.h` files via `git diff`
|
|
2. **Run Static Analysis**: Execute `clang-tidy` and `cppcheck`
|
|
3. **Memory Safety Scan**: Check for raw new/delete, buffer overflows, use-after-free
|
|
4. **Concurrency Review**: Analyze thread safety, mutex usage, data races
|
|
5. **Modern C++ Check**: Verify code follows C++17/20 conventions and best practices
|
|
6. **Generate Report**: Categorize issues by severity
|
|
|
|
## When to Use
|
|
|
|
Use `/cpp-review` when:
|
|
- After writing or modifying C++ code
|
|
- Before committing C++ changes
|
|
- Reviewing pull requests with C++ code
|
|
- Onboarding to a new C++ codebase
|
|
- Checking for memory safety issues
|
|
|
|
## Review Categories
|
|
|
|
### CRITICAL (Must Fix)
|
|
- Raw `new`/`delete` without RAII
|
|
- Buffer overflows and use-after-free
|
|
- Data races without synchronization
|
|
- Command injection via `system()`
|
|
- Uninitialized variable reads
|
|
- Null pointer dereferences
|
|
|
|
### HIGH (Should Fix)
|
|
- Rule of Five violations
|
|
- Missing `std::lock_guard` / `std::scoped_lock`
|
|
- Detached threads without proper lifetime management
|
|
- C-style casts instead of `static_cast`/`dynamic_cast`
|
|
- Missing `const` correctness
|
|
|
|
### MEDIUM (Consider)
|
|
- Unnecessary copies (pass by value instead of `const&`)
|
|
- Missing `reserve()` on known-size containers
|
|
- `using namespace std;` in headers
|
|
- Missing `[[nodiscard]]` on important return values
|
|
- Overly complex template metaprogramming
|
|
|
|
## Automated Checks Run
|
|
|
|
```bash
|
|
# Static analysis
|
|
clang-tidy --checks='*,-llvmlibc-*' src/*.cpp -- -std=c++17
|
|
|
|
# Additional analysis
|
|
cppcheck --enable=all --suppress=missingIncludeSystem src/
|
|
|
|
# Build with warnings
|
|
cmake --build build -- -Wall -Wextra -Wpedantic
|
|
```
|
|
|
|
## Example Usage
|
|
|
|
```text
|
|
User: /cpp-review
|
|
|
|
Agent:
|
|
# C++ Code Review Report
|
|
|
|
## Files Reviewed
|
|
- src/handler/user.cpp (modified)
|
|
- src/service/auth.cpp (modified)
|
|
|
|
## Static Analysis Results
|
|
✓ clang-tidy: 2 warnings
|
|
✓ cppcheck: No issues
|
|
|
|
## Issues Found
|
|
|
|
[CRITICAL] Memory Leak
|
|
File: src/service/auth.cpp:45
|
|
Issue: Raw `new` without matching `delete`
|
|
```cpp
|
|
auto* session = new Session(userId); // Memory leak!
|
|
cache[userId] = session;
|
|
```
|
|
Fix: Use `std::unique_ptr`
|
|
```cpp
|
|
auto session = std::make_unique<Session>(userId);
|
|
cache[userId] = std::move(session);
|
|
```
|
|
|
|
[HIGH] Missing const Reference
|
|
File: src/handler/user.cpp:28
|
|
Issue: Large object passed by value
|
|
```cpp
|
|
void processUser(User user) { // Unnecessary copy
|
|
```
|
|
Fix: Pass by const reference
|
|
```cpp
|
|
void processUser(const User& user) {
|
|
```
|
|
|
|
## Summary
|
|
- CRITICAL: 1
|
|
- HIGH: 1
|
|
- MEDIUM: 0
|
|
|
|
Recommendation: ❌ Block merge until CRITICAL issue is fixed
|
|
```
|
|
|
|
## Approval Criteria
|
|
|
|
| Status | Condition |
|
|
|--------|-----------|
|
|
| ✅ Approve | No CRITICAL or HIGH issues |
|
|
| ⚠️ Warning | Only MEDIUM issues (merge with caution) |
|
|
| ❌ Block | CRITICAL or HIGH issues found |
|
|
|
|
## Integration with Other Commands
|
|
|
|
- Use `/cpp-test` first to ensure tests pass
|
|
- Use `/cpp-build` if build errors occur
|
|
- Use `/cpp-review` before committing
|
|
- Use `/code-review` for non-C++ specific concerns
|
|
|
|
## Related
|
|
|
|
- Agent: `agents/cpp-reviewer.md`
|
|
- Skills: `skills/cpp-coding-standards/`, `skills/cpp-testing/`
|