mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 21:53:28 +08:00
feat: add C++ language support and hook tests (#539)
- 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.
This commit is contained in:
44
rules/cpp/coding-style.md
Normal file
44
rules/cpp/coding-style.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
paths:
|
||||
- "**/*.cpp"
|
||||
- "**/*.hpp"
|
||||
- "**/*.cc"
|
||||
- "**/*.hh"
|
||||
- "**/*.cxx"
|
||||
- "**/*.h"
|
||||
- "**/CMakeLists.txt"
|
||||
---
|
||||
# C++ Coding Style
|
||||
|
||||
> This file extends [common/coding-style.md](../common/coding-style.md) with C++ specific content.
|
||||
|
||||
## Modern C++ (C++17/20/23)
|
||||
|
||||
- Prefer **modern C++ features** over C-style constructs
|
||||
- Use `auto` when the type is obvious from context
|
||||
- Use `constexpr` for compile-time constants
|
||||
- Use structured bindings: `auto [key, value] = map_entry;`
|
||||
|
||||
## Resource Management
|
||||
|
||||
- **RAII everywhere** — no manual `new`/`delete`
|
||||
- Use `std::unique_ptr` for exclusive ownership
|
||||
- Use `std::shared_ptr` only when shared ownership is truly needed
|
||||
- Use `std::make_unique` / `std::make_shared` over raw `new`
|
||||
|
||||
## Naming Conventions
|
||||
|
||||
- Types/Classes: `PascalCase`
|
||||
- Functions/Methods: `snake_case` or `camelCase` (follow project convention)
|
||||
- Constants: `kPascalCase` or `UPPER_SNAKE_CASE`
|
||||
- Namespaces: `lowercase`
|
||||
- Member variables: `snake_case_` (trailing underscore) or `m_` prefix
|
||||
|
||||
## Formatting
|
||||
|
||||
- Use **clang-format** — no style debates
|
||||
- Run `clang-format -i <file>` before committing
|
||||
|
||||
## Reference
|
||||
|
||||
See skill: `cpp-coding-standards` for comprehensive C++ coding standards and guidelines.
|
||||
39
rules/cpp/hooks.md
Normal file
39
rules/cpp/hooks.md
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
paths:
|
||||
- "**/*.cpp"
|
||||
- "**/*.hpp"
|
||||
- "**/*.cc"
|
||||
- "**/*.hh"
|
||||
- "**/*.cxx"
|
||||
- "**/*.h"
|
||||
- "**/CMakeLists.txt"
|
||||
---
|
||||
# C++ Hooks
|
||||
|
||||
> This file extends [common/hooks.md](../common/hooks.md) with C++ specific content.
|
||||
|
||||
## Build Hooks
|
||||
|
||||
Run these checks before committing C++ changes:
|
||||
|
||||
```bash
|
||||
# Format check
|
||||
clang-format --dry-run --Werror src/*.cpp src/*.hpp
|
||||
|
||||
# Static analysis
|
||||
clang-tidy src/*.cpp -- -std=c++17
|
||||
|
||||
# Build
|
||||
cmake --build build
|
||||
|
||||
# Tests
|
||||
ctest --test-dir build --output-on-failure
|
||||
```
|
||||
|
||||
## Recommended CI Pipeline
|
||||
|
||||
1. **clang-format** — formatting check
|
||||
2. **clang-tidy** — static analysis
|
||||
3. **cppcheck** — additional analysis
|
||||
4. **cmake build** — compilation
|
||||
5. **ctest** — test execution with sanitizers
|
||||
51
rules/cpp/patterns.md
Normal file
51
rules/cpp/patterns.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
paths:
|
||||
- "**/*.cpp"
|
||||
- "**/*.hpp"
|
||||
- "**/*.cc"
|
||||
- "**/*.hh"
|
||||
- "**/*.cxx"
|
||||
- "**/*.h"
|
||||
- "**/CMakeLists.txt"
|
||||
---
|
||||
# C++ Patterns
|
||||
|
||||
> This file extends [common/patterns.md](../common/patterns.md) with C++ specific content.
|
||||
|
||||
## RAII (Resource Acquisition Is Initialization)
|
||||
|
||||
Tie resource lifetime to object lifetime:
|
||||
|
||||
```cpp
|
||||
class FileHandle {
|
||||
public:
|
||||
explicit FileHandle(const std::string& path) : file_(std::fopen(path.c_str(), "r")) {}
|
||||
~FileHandle() { if (file_) std::fclose(file_); }
|
||||
FileHandle(const FileHandle&) = delete;
|
||||
FileHandle& operator=(const FileHandle&) = delete;
|
||||
private:
|
||||
std::FILE* file_;
|
||||
};
|
||||
```
|
||||
|
||||
## Rule of Five/Zero
|
||||
|
||||
- **Rule of Zero**: Prefer classes that need no custom destructor, copy/move constructors, or assignments
|
||||
- **Rule of Five**: If you define any of destructor/copy-ctor/copy-assign/move-ctor/move-assign, define all five
|
||||
|
||||
## Value Semantics
|
||||
|
||||
- Pass small/trivial types by value
|
||||
- Pass large types by `const&`
|
||||
- Return by value (rely on RVO/NRVO)
|
||||
- Use move semantics for sink parameters
|
||||
|
||||
## Error Handling
|
||||
|
||||
- Use exceptions for exceptional conditions
|
||||
- Use `std::optional` for values that may not exist
|
||||
- Use `std::expected` (C++23) or result types for expected failures
|
||||
|
||||
## Reference
|
||||
|
||||
See skill: `cpp-coding-standards` for comprehensive C++ patterns and anti-patterns.
|
||||
51
rules/cpp/security.md
Normal file
51
rules/cpp/security.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
paths:
|
||||
- "**/*.cpp"
|
||||
- "**/*.hpp"
|
||||
- "**/*.cc"
|
||||
- "**/*.hh"
|
||||
- "**/*.cxx"
|
||||
- "**/*.h"
|
||||
- "**/CMakeLists.txt"
|
||||
---
|
||||
# C++ Security
|
||||
|
||||
> This file extends [common/security.md](../common/security.md) with C++ specific content.
|
||||
|
||||
## Memory Safety
|
||||
|
||||
- Never use raw `new`/`delete` — use smart pointers
|
||||
- Never use C-style arrays — use `std::array` or `std::vector`
|
||||
- Never use `malloc`/`free` — use C++ allocation
|
||||
- Avoid `reinterpret_cast` unless absolutely necessary
|
||||
|
||||
## Buffer Overflows
|
||||
|
||||
- Use `std::string` over `char*`
|
||||
- Use `.at()` for bounds-checked access when safety matters
|
||||
- Never use `strcpy`, `strcat`, `sprintf` — use `std::string` or `fmt::format`
|
||||
|
||||
## Undefined Behavior
|
||||
|
||||
- Always initialize variables
|
||||
- Avoid signed integer overflow
|
||||
- Never dereference null or dangling pointers
|
||||
- Use sanitizers in CI:
|
||||
```bash
|
||||
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" ..
|
||||
```
|
||||
|
||||
## Static Analysis
|
||||
|
||||
- Use **clang-tidy** for automated checks:
|
||||
```bash
|
||||
clang-tidy --checks='*' src/*.cpp
|
||||
```
|
||||
- Use **cppcheck** for additional analysis:
|
||||
```bash
|
||||
cppcheck --enable=all src/
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
See skill: `cpp-coding-standards` for detailed security guidelines.
|
||||
44
rules/cpp/testing.md
Normal file
44
rules/cpp/testing.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
paths:
|
||||
- "**/*.cpp"
|
||||
- "**/*.hpp"
|
||||
- "**/*.cc"
|
||||
- "**/*.hh"
|
||||
- "**/*.cxx"
|
||||
- "**/*.h"
|
||||
- "**/CMakeLists.txt"
|
||||
---
|
||||
# C++ Testing
|
||||
|
||||
> This file extends [common/testing.md](../common/testing.md) with C++ specific content.
|
||||
|
||||
## Framework
|
||||
|
||||
Use **GoogleTest** (gtest/gmock) with **CMake/CTest**.
|
||||
|
||||
## Running Tests
|
||||
|
||||
```bash
|
||||
cmake --build build && ctest --test-dir build --output-on-failure
|
||||
```
|
||||
|
||||
## Coverage
|
||||
|
||||
```bash
|
||||
cmake -DCMAKE_CXX_FLAGS="--coverage" -DCMAKE_EXE_LINKER_FLAGS="--coverage" ..
|
||||
cmake --build .
|
||||
ctest --output-on-failure
|
||||
lcov --capture --directory . --output-file coverage.info
|
||||
```
|
||||
|
||||
## Sanitizers
|
||||
|
||||
Always run tests with sanitizers in CI:
|
||||
|
||||
```bash
|
||||
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" ..
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
See skill: `cpp-testing` for detailed C++ testing patterns, TDD workflow, and GoogleTest/GMock usage.
|
||||
Reference in New Issue
Block a user