Files
metabuilder/dbal/cpp/README.Linting.md
copilot-swe-agent[bot] 61d6558ace Add comprehensive docstrings and industry-standard C++ linting
Implemented professional documentation and code quality tools:

**Docstrings (Doxygen-style):**
- Comprehensive file-level documentation
- Class and struct documentation with examples
- Function documentation (params, returns, throws)
- Member variable inline documentation
- Example code blocks
- Cross-references

**Linting Configuration:**
- .clang-tidy - Industry-standard static analysis
  - bugprone, cert, cppcoreguidelines checks
  - Google C++ Style Guide compliance
  - Modern C++ suggestions
  - Performance optimizations
- .clang-format - Automatic code formatting
  - Based on Google style with customizations
  - 4-space indentation, 100-char line limit
  - Consistent pointer/reference alignment

**Lint Script (lint.sh):**
- Automated quality checks
- clang-tidy static analysis
- clang-format formatting verification
- cppcheck additional analysis
- Long function detection
- TODO/FIXME tracking
- --fix flag for auto-formatting

**Documentation:**
- README.Linting.md - Complete linting guide
  - Tool installation
  - Usage examples
  - Pre-commit hooks
  - IDE integration (VSCode, CLion)
  - Common issues and fixes
  - CI/CD integration

**Standards:**
- Naming conventions enforced
- C++ Core Guidelines compliance
- Secure coding (CERT guidelines)
- Readability and maintainability
- Performance best practices

Production-grade code quality infrastructure.

Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
2025-12-25 00:49:56 +00:00

317 lines
6.1 KiB
Markdown

# C++ Code Quality and Linting Guide
## Overview
The DBAL C++ project uses industry-standard tools for maintaining code quality:
- **clang-tidy**: Static analysis and linting
- **clang-format**: Code formatting
- **cppcheck**: Additional static analysis
- **Doxygen**: Documentation generation
## Quick Start
### Run All Checks
```bash
cd dbal/cpp
./lint.sh
```
### Apply Automatic Fixes
```bash
./lint.sh --fix
```
## Tools
### 1. clang-tidy
**Purpose**: Static analysis, best practices enforcement, modern C++ suggestions
**Configuration**: `.clang-tidy`
**Enabled Checks**:
- `bugprone-*` - Potential bugs
- `cert-*` - CERT secure coding guidelines
- `clang-analyzer-*` - Clang static analyzer
- `cppcoreguidelines-*` - C++ Core Guidelines
- `google-*` - Google C++ Style Guide
- `modernize-*` - Modern C++ suggestions
- `performance-*` - Performance improvements
- `readability-*` - Code readability
**Usage**:
```bash
# Single file
clang-tidy src/daemon/server.cpp -p build/
# All files
find src -name "*.cpp" | xargs clang-tidy -p build/
```
### 2. clang-format
**Purpose**: Automatic code formatting
**Configuration**: `.clang-format`
**Style**: Based on Google C++ Style Guide with customizations:
- 4-space indentation
- 100 character line limit
- Attach braces
- Pointer/reference alignment: left
**Usage**:
```bash
# Check formatting
clang-format --dry-run --Werror src/daemon/server.cpp
# Apply formatting
clang-format -i src/daemon/server.cpp
# Format all files
find src include -name "*.cpp" -o -name "*.hpp" | xargs clang-format -i
```
### 3. cppcheck
**Purpose**: Additional static analysis for potential bugs
**Usage**:
```bash
cppcheck --enable=all \
--suppress=missingIncludeSystem \
--std=c++17 \
-I include \
src/
```
### 4. Doxygen
**Purpose**: Generate HTML documentation from code comments
**Style**: Javadoc-style comments
**Example**:
```cpp
/**
* @brief Brief description
*
* Detailed description of the function or class.
*
* @param param1 Description of parameter
* @param param2 Description of parameter
* @return Description of return value
* @throws Error Description of when error is thrown
*
* @example
* @code
* auto result = myFunction(42, "test");
* if (result.isOk()) {
* std::cout << result.value();
* }
* @endcode
*/
Result<int> myFunction(int param1, const std::string& param2);
```
**Generate docs**:
```bash
doxygen Doxyfile
```
## Documentation Standards
### File Headers
Every source file should have a file-level docstring:
```cpp
/**
* @file filename.cpp
* @brief Brief description of file purpose
*
* Detailed description of what this file contains,
* its role in the system, and any important notes.
*/
```
### Class Documentation
```cpp
/**
* @class ClassName
* @brief Brief description of class purpose
*
* Detailed description of the class, its responsibilities,
* and how it should be used.
*
* @example
* @code
* ClassName obj(param1, param2);
* obj.doSomething();
* @endcode
*/
class ClassName {
// ...
};
```
### Function Documentation
```cpp
/**
* @brief Brief description of what function does
*
* Detailed description including algorithm details,
* preconditions, postconditions, and side effects.
*
* @param param1 Description of first parameter
* @param param2 Description of second parameter
* @return Description of return value
* @throws ErrorType When this error occurs
*
* @note Special notes or caveats
* @warning Important warnings
* @see Related functions or classes
*/
Result<ReturnType> functionName(Type1 param1, Type2 param2);
```
### Member Variables
```cpp
class MyClass {
private:
int counter_; ///< Brief description of member
std::string name_; ///< Brief description of member
};
```
## Naming Conventions
Enforced by clang-tidy configuration:
- **Classes/Structs**: `CamelCase`
- **Functions**: `camelCase`
- **Variables**: `lower_case`
- **Constants**: `UPPER_CASE`
- **Member variables**: `lower_case_` (trailing underscore)
- **Namespaces**: `lower_case`
## Pre-commit Hooks
To automatically run linting before commits:
```bash
# Create pre-commit hook
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
cd dbal/cpp
./lint.sh
if [ $? -ne 0 ]; then
echo "Linting failed. Fix issues or use git commit --no-verify to skip."
exit 1
fi
EOF
chmod +x .git/hooks/pre-commit
```
## IDE Integration
### VSCode
Install extensions:
- **C/C++** (Microsoft)
- **clangd**
- **Clang-Format**
Settings (`.vscode/settings.json`):
```json
{
"clang-format.executable": "/usr/bin/clang-format",
"clang-format.style": "file",
"editor.formatOnSave": true,
"C_Cpp.codeAnalysis.clangTidy.enabled": true,
"C_Cpp.codeAnalysis.clangTidy.path": "/usr/bin/clang-tidy"
}
```
### CLion
Settings → Editor → Code Style → C/C++:
- Scheme: Set from file (.clang-format)
Settings → Editor → Inspections → C/C++:
- Enable "Clang-Tidy"
- Configuration file: .clang-tidy
## Continuous Integration
Add to GitHub Actions workflow:
```yaml
- name: Lint C++ Code
run: |
cd dbal/cpp
./lint.sh
```
## Common Issues and Fixes
### Issue: "Use of old-style cast"
```cpp
// Bad
int x = (int)value;
// Good
int x = static_cast<int>(value);
```
### Issue: "Variable never read"
```cpp
// Bad
int unused = 42;
// Good
[[maybe_unused]] int for_future_use = 42;
```
### Issue: "Missing const"
```cpp
// Bad
std::string getName() { return name_; }
// Good
std::string getName() const { return name_; }
```
### Issue: "Pass by value instead of const reference"
```cpp
// Bad
void setName(std::string name) { name_ = name; }
// Good
void setName(const std::string& name) { name_ = name; }
```
## Metrics
The lint script reports:
- Formatting violations
- Static analysis warnings
- TODO/FIXME comments count
- Long functions (>100 lines)
Aim for zero warnings before committing.
## Resources
- [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)
- [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)
- [clang-tidy checks](https://clang.llvm.org/extra/clang-tidy/checks/list.html)
- [Doxygen manual](https://www.doxygen.nl/manual/)