Browse Source
- Change @typescript-eslint/no-explicit-any from warn to error to block builds with any types - Add type-safety-check script for automated pre-commit validation - Implement comprehensive pre-commit checks including ESLint, TypeScript compilation, and any type scanning - Include database migration status verification in pre-commit process - Provide colored output and clear guidance for type safety issues This ensures type safety is enforced at the CI level and prevents regression of any type usage.pull/152/head^2
3 changed files with 105 additions and 1 deletions
@ -0,0 +1,103 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
# Type Safety Pre-commit Check Script |
||||
|
# This script ensures type safety before commits by running linting and type checking |
||||
|
|
||||
|
set -e |
||||
|
|
||||
|
echo "🔍 Running Type Safety Pre-commit Checks..." |
||||
|
|
||||
|
# Colors for output |
||||
|
RED='\033[0;31m' |
||||
|
GREEN='\033[0;32m' |
||||
|
YELLOW='\033[1;33m' |
||||
|
NC='\033[0m' # No Color |
||||
|
|
||||
|
# Function to print colored output |
||||
|
print_status() { |
||||
|
echo -e "${GREEN}✅ $1${NC}" |
||||
|
} |
||||
|
|
||||
|
print_warning() { |
||||
|
echo -e "${YELLOW}⚠️ $1${NC}" |
||||
|
} |
||||
|
|
||||
|
print_error() { |
||||
|
echo -e "${RED}❌ $1${NC}" |
||||
|
} |
||||
|
|
||||
|
# Check if we're in the right directory |
||||
|
if [ ! -f "package.json" ]; then |
||||
|
print_error "Must run from project root directory" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Step 1: Run ESLint with TypeScript rules |
||||
|
print_status "Running ESLint TypeScript checks..." |
||||
|
if npm run lint > /dev/null 2>&1; then |
||||
|
print_status "ESLint passed - no type safety issues found" |
||||
|
else |
||||
|
print_error "ESLint failed - type safety issues detected" |
||||
|
echo "" |
||||
|
echo "Running lint with details..." |
||||
|
npm run lint |
||||
|
echo "" |
||||
|
print_error "Please fix the above type safety issues before committing" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Step 2: Run TypeScript type checking |
||||
|
print_status "Running TypeScript type checking..." |
||||
|
if npm run type-check > /dev/null 2>&1; then |
||||
|
print_status "TypeScript compilation passed" |
||||
|
else |
||||
|
print_error "TypeScript compilation failed" |
||||
|
echo "" |
||||
|
echo "Running type check with details..." |
||||
|
npm run type-check |
||||
|
echo "" |
||||
|
print_error "Please fix the above TypeScript errors before committing" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Step 3: Check for any remaining 'any' types |
||||
|
print_status "Scanning for any remaining 'any' types..." |
||||
|
ANY_COUNT=$(grep -r "any" src/ --include="*.ts" --include="*.vue" | grep -v "// eslint-disable" | grep -v "eslint-disable-next-line" | wc -l) |
||||
|
|
||||
|
if [ "$ANY_COUNT" -eq 0 ]; then |
||||
|
print_status "No 'any' types found in source code" |
||||
|
else |
||||
|
print_warning "Found $ANY_COUNT instances of 'any' type usage" |
||||
|
echo "" |
||||
|
echo "Instances found:" |
||||
|
grep -r "any" src/ --include="*.ts" --include="*.vue" | grep -v "// eslint-disable" | grep -v "eslint-disable-next-line" || true |
||||
|
echo "" |
||||
|
print_error "Please replace 'any' types with proper TypeScript types before committing" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Step 4: Verify database migration status |
||||
|
print_status "Checking database migration status..." |
||||
|
if grep -r "databaseUtil" src/ --include="*.ts" --include="*.vue" > /dev/null 2>&1; then |
||||
|
print_warning "Found databaseUtil imports - ensure migration is complete" |
||||
|
echo "" |
||||
|
echo "Files with databaseUtil imports:" |
||||
|
grep -r "databaseUtil" src/ --include="*.ts" --include="*.vue" | head -5 || true |
||||
|
echo "" |
||||
|
print_warning "Consider completing database migration to PlatformServiceMixin" |
||||
|
else |
||||
|
print_status "No databaseUtil imports found - migration appears complete" |
||||
|
fi |
||||
|
|
||||
|
# All checks passed |
||||
|
echo "" |
||||
|
print_status "All type safety checks passed! 🎉" |
||||
|
print_status "Your code is ready for commit" |
||||
|
echo "" |
||||
|
echo "📚 Remember to follow the Type Safety Guidelines:" |
||||
|
echo " - docs/typescript-type-safety-guidelines.md" |
||||
|
echo " - Use proper error handling patterns" |
||||
|
echo " - Leverage existing type definitions" |
||||
|
echo " - Run 'npm run lint-fix' for automatic fixes" |
||||
|
|
||||
|
exit 0 |
Loading…
Reference in new issue