#!/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 '/dev/null; then echo " ⚠️ $file: 缺少 标签" FRONTEND_ISSUES=$((FRONTEND_ISSUES + 1)) fi if ! grep -q '' "$file" 2>/dev/null; then echo " ⚠️ $file: 缺少 结束标签" 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 '