Files
metabuilder/dbal/cpp/lint.sh
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

166 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# DBAL C++ Linting and Formatting Script
# Uses industry-standard tools: clang-tidy, clang-format, cppcheck
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "========================================="
echo "DBAL C++ Code Quality Check"
echo "========================================="
echo ""
# Check if tools are installed
MISSING_TOOLS=()
if ! command -v clang-tidy &> /dev/null; then
MISSING_TOOLS+=("clang-tidy")
fi
if ! command -v clang-format &> /dev/null; then
MISSING_TOOLS+=("clang-format")
fi
if ! command -v cppcheck &> /dev/null; then
MISSING_TOOLS+=("cppcheck")
fi
if [ ${#MISSING_TOOLS[@]} -ne 0 ]; then
echo -e "${YELLOW}Warning: Missing tools: ${MISSING_TOOLS[*]}${NC}"
echo "Install with:"
echo " Ubuntu/Debian: sudo apt-get install clang-tidy clang-format cppcheck"
echo " macOS: brew install llvm cppcheck"
echo ""
fi
# Change to cpp directory
cd "$(dirname "$0")"
# Function to print section header
print_section() {
echo ""
echo "========================================="
echo "$1"
echo "========================================="
}
# 1. clang-format (code formatting)
if command -v clang-format &> /dev/null; then
print_section "1. Running clang-format (code formatting)"
# Check if --fix flag is provided
if [ "$1" == "--fix" ]; then
echo "Applying formatting fixes..."
find src include -name "*.cpp" -o -name "*.hpp" -o -name "*.h" | \
xargs clang-format -i --style=file
echo -e "${GREEN}✓ Formatting applied${NC}"
else
echo "Checking formatting (use --fix to apply)..."
FORMAT_ISSUES=$(find src include -name "*.cpp" -o -name "*.hpp" -o -name "*.h" | \
xargs clang-format --dry-run --Werror --style=file 2>&1 || true)
if [ -n "$FORMAT_ISSUES" ]; then
echo -e "${YELLOW}⚠ Formatting issues found:${NC}"
echo "$FORMAT_ISSUES"
else
echo -e "${GREEN}✓ All files properly formatted${NC}"
fi
fi
else
echo -e "${YELLOW}⚠ clang-format not found, skipping${NC}"
fi
# 2. clang-tidy (static analysis)
if command -v clang-tidy &> /dev/null; then
print_section "2. Running clang-tidy (static analysis)"
# Build compile_commands.json if it doesn't exist
if [ ! -f build/compile_commands.json ]; then
echo "Generating compile_commands.json..."
mkdir -p build
cd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
cd ..
fi
echo "Analyzing source files..."
TIDY_ISSUES=0
# Run clang-tidy on all source files
find src -name "*.cpp" | while read -r file; do
echo "Checking $file..."
if ! clang-tidy "$file" -p build/ --quiet 2>&1; then
TIDY_ISSUES=$((TIDY_ISSUES + 1))
fi
done
if [ $TIDY_ISSUES -eq 0 ]; then
echo -e "${GREEN}✓ No issues found${NC}"
else
echo -e "${YELLOW}⚠ Found $TIDY_ISSUES files with issues${NC}"
fi
else
echo -e "${YELLOW}⚠ clang-tidy not found, skipping${NC}"
fi
# 3. cppcheck (additional static analysis)
if command -v cppcheck &> /dev/null; then
print_section "3. Running cppcheck (additional analysis)"
cppcheck --enable=all \
--suppress=missingIncludeSystem \
--suppress=unusedFunction \
--quiet \
--std=c++17 \
-I include \
src/ 2>&1 | tee cppcheck-report.txt
if [ -s cppcheck-report.txt ]; then
echo -e "${YELLOW}⚠ Issues found (see cppcheck-report.txt)${NC}"
else
echo -e "${GREEN}✓ No issues found${NC}"
rm -f cppcheck-report.txt
fi
else
echo -e "${YELLOW}⚠ cppcheck not found, skipping${NC}"
fi
# 4. Check for common issues
print_section "4. Checking for common issues"
echo "Checking for TODO/FIXME comments..."
TODO_COUNT=$(grep -r "TODO\|FIXME" src/ include/ || true | wc -l)
if [ "$TODO_COUNT" -gt 0 ]; then
echo -e "${YELLOW}⚠ Found $TODO_COUNT TODO/FIXME comments${NC}"
grep -rn "TODO\|FIXME" src/ include/ || true
else
echo -e "${GREEN}✓ No TODO/FIXME comments${NC}"
fi
echo ""
echo "Checking for long functions (>100 lines)..."
LONG_FUNCTIONS=$(awk '/^[[:space:]]*[a-zA-Z_].*\(.*\).*\{/{count=0; name=$0}
{count++}
/^[[:space:]]*\}/{if(count>100) print FILENAME":"NR" "name" ("count" lines)"}' \
$(find src -name "*.cpp") || true)
if [ -n "$LONG_FUNCTIONS" ]; then
echo -e "${YELLOW}⚠ Long functions found:${NC}"
echo "$LONG_FUNCTIONS"
else
echo -e "${GREEN}✓ No overly long functions${NC}"
fi
# Summary
print_section "Summary"
echo "Linting complete!"
echo ""
echo "To fix formatting issues, run: ./lint.sh --fix"
echo "For detailed analysis, check the generated reports."
echo ""