| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #!/bin/bash
- # ============================================================
- # 智慧水务管理系统 - Lint 检查脚本
- # 用法: ./scripts/lint.sh [--fix] [--python-only] [--java-only] [--frontend-only]
- # ============================================================
- set -euo pipefail
-
- # 默认全部检查
- CHECK_PYTHON=true
- CHECK_JAVA=true
- CHECK_FRONTEND=true
- FIX_MODE=false
- EXIT_CODE=0
-
- # 解析参数
- while [[ $# -gt 0 ]]; do
- case $1 in
- --fix)
- FIX_MODE=true; shift ;;
- --python-only)
- CHECK_JAVA=false; CHECK_FRONTEND=false; shift ;;
- --java-only)
- CHECK_PYTHON=false; CHECK_FRONTEND=false; shift ;;
- --frontend-only)
- CHECK_PYTHON=false; CHECK_JAVA=false; shift ;;
- -h|--help)
- echo "用法: $0 [选项]"
- echo ""
- echo " --fix 自动修复可修复的问题"
- echo " --python-only 仅检查 Python 代码"
- echo " --java-only 仅检查 Java 代码"
- echo " --frontend-only 仅检查前端代码"
- exit 0
- ;;
- *)
- echo "❌ 未知参数: $1"
- exit 1
- ;;
- esac
- done
-
- echo "========================================="
- echo " 智慧水务管理系统 - 代码检查"
- echo "========================================="
-
- # ==================== Python Lint ====================
- if [ "$CHECK_PYTHON" = true ]; then
- echo ""
- echo "▶ Python 代码检查..."
-
- PY_FILES=$(find . -name "*.py" \
- -not -path "./.git/*" \
- -not -path "*/node_modules/*" \
- -not -path "*/__pycache__/*" \
- -not -path "*/venv/*" \
- -not -path "*/.venv/*" \
- 2>/dev/null || true)
-
- if [ -n "$PY_FILES" ]; then
- # 检查 ruff 是否安装
- if command -v ruff &>/dev/null; then
- echo " 使用 ruff 检查..."
- if [ "$FIX_MODE" = true ]; then
- ruff check . --fix --exclude node_modules --exclude .git --exclude __pycache__ || EXIT_CODE=1
- ruff format . --exclude node_modules --exclude .git --exclude __pycache__ || EXIT_CODE=1
- else
- ruff check . --exclude node_modules --exclude .git --exclude __pycache__ || EXIT_CODE=1
- ruff format --check . --exclude node_modules --exclude .git --exclude __pycache__ || EXIT_CODE=1
- fi
- echo " ✅ Python 检查完成"
- elif command -v flake8 &>/dev/null; then
- echo " 使用 flake8 检查..."
- flake8 . --exclude=node_modules,.git,__pycache__,venv --max-line-length=120 || EXIT_CODE=1
- echo " ✅ Python 检查完成"
- else
- echo " ⚠️ 未安装 ruff 或 flake8,安装方法: pip install ruff"
- echo " 跳过 Python lint"
- fi
- else
- echo " ⏭️ 未发现 Python 文件,跳过"
- fi
- fi
-
- # ==================== Java Lint ====================
- if [ "$CHECK_JAVA" = true ]; then
- echo ""
- echo "▶ Java 代码检查..."
-
- if [ -f "pom.xml" ]; then
- if command -v mvn &>/dev/null; then
- echo " 使用 Maven Checkstyle 检查..."
- mvn checkstyle:check -B 2>/dev/null || {
- echo " ⚠️ Checkstyle 检查未通过或未配置(非阻塞)"
- # 不设置 EXIT_CODE=1,因为 checkstyle 可能未配置
- }
- echo " ✅ Java 检查完成"
- else
- echo " ⚠️ 未安装 Maven,跳过 Java lint"
- fi
- else
- echo " ⏭️ 未发现 pom.xml,跳过"
- fi
- fi
-
- # ==================== 前端 Lint ====================
- if [ "$CHECK_FRONTEND" = true ]; then
- echo ""
- echo "▶ 前端代码检查..."
-
- FRONTEND_ISSUES=0
-
- # 检查 HTML 文件基本有效性
- echo " 检查 HTML 文件..."
- HTML_FILES=$(find ./frontend -name "*.html" -not -path "*/node_modules/*" 2>/dev/null || true)
- if [ -n "$HTML_FILES" ]; then
- while IFS= read -r file; do
- # 检查基本结构
- if ! grep -q '<html' "$file" 2>/dev/null; then
- echo " ⚠️ $file: 缺少 <html> 标签"
- FRONTEND_ISSUES=$((FRONTEND_ISSUES + 1))
- fi
- if ! grep -q '</html>' "$file" 2>/dev/null; then
- echo " ⚠️ $file: 缺少 </html> 结束标签"
- FRONTEND_ISSUES=$((FRONTEND_ISSUES + 1))
- fi
- done <<< "$HTML_FILES"
- fi
-
- # 检查 Vue 文件基本结构
- echo " 检查 Vue 文件..."
- VUE_FILES=$(find ./frontend/src -name "*.vue" -not -path "*/node_modules/*" 2>/dev/null || true)
- if [ -n "$VUE_FILES" ]; then
- while IFS= read -r file; do
- if ! grep -q '<template>' "$file" 2>/dev/null; then
- echo " ⚠️ $file: 缺少 <template> 块"
- FRONTEND_ISSUES=$((FRONTEND_ISSUES + 1))
- fi
- done <<< "$VUE_FILES"
- fi
-
- # 检查 TypeScript 配置
- if [ -f "frontend/tsconfig.json" ]; then
- echo " 检查 TypeScript 配置..."
- if ! python3 -c "import json; json.load(open('frontend/tsconfig.json'))" 2>/dev/null; then
- echo " ⚠️ tsconfig.json 不是有效的 JSON"
- FRONTEND_ISSUES=$((FRONTEND_ISSUES + 1))
- fi
- fi
-
- # 检查 package.json 有效性
- if [ -f "frontend/package.json" ]; then
- echo " 检查 package.json..."
- if ! python3 -c "import json; json.load(open('frontend/package.json'))" 2>/dev/null; then
- echo " ⚠️ package.json 不是有效的 JSON"
- FRONTEND_ISSUES=$((FRONTEND_ISSUES + 1))
- fi
- fi
-
- # 使用 ESLint(如果可用)
- if [ -f "frontend/node_modules/.bin/eslint" ]; then
- echo " 使用 ESLint 检查..."
- cd frontend
- if [ "$FIX_MODE" = true ]; then
- npx eslint --fix src/ 2>/dev/null || EXIT_CODE=1
- else
- npx eslint src/ 2>/dev/null || EXIT_CODE=1
- fi
- cd ..
- fi
-
- if [ $FRONTEND_ISSUES -gt 0 ]; then
- echo " ⚠️ 发现 ${FRONTEND_ISSUES} 个前端问题"
- else
- echo " ✅ 前端检查完成"
- fi
- fi
-
- # ==================== 结果汇总 ====================
- echo ""
- echo "========================================="
- if [ $EXIT_CODE -eq 0 ]; then
- echo " ✅ 所有检查通过"
- else
- echo " ❌ 检查发现问题,请修复后重新提交"
- fi
- echo "========================================="
-
- exit $EXIT_CODE
|