281 lines
7.5 KiB
Bash
Executable File
281 lines
7.5 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Augment 代码生成规范验证脚本
|
||
# 用于验证生成的代码是否符合规范要求
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 打印带颜色的消息
|
||
print_info() {
|
||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||
}
|
||
|
||
print_success() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
print_header() {
|
||
echo -e "${BLUE}🔍 Augment 代码生成规范验证${NC}"
|
||
echo "=================================================="
|
||
}
|
||
|
||
# 检查必要的工具
|
||
check_prerequisites() {
|
||
print_info "检查必要工具..."
|
||
|
||
if ! command -v dart &> /dev/null; then
|
||
print_error "Dart SDK 未安装或不在 PATH 中"
|
||
exit 1
|
||
fi
|
||
|
||
print_success "Dart SDK 已安装"
|
||
}
|
||
|
||
# 验证 swagger.json
|
||
validate_swagger() {
|
||
print_info "验证 swagger.json..."
|
||
|
||
if [ ! -f "swagger.json" ]; then
|
||
print_error "swagger.json 文件不存在"
|
||
return 1
|
||
fi
|
||
|
||
# 检查 JSON 格式
|
||
if ! jq empty swagger.json 2>/dev/null; then
|
||
if ! python3 -m json.tool swagger.json > /dev/null 2>&1; then
|
||
print_error "swagger.json 格式错误"
|
||
return 1
|
||
fi
|
||
fi
|
||
|
||
print_success "swagger.json 格式正确"
|
||
}
|
||
|
||
# 验证生成的文件结构
|
||
validate_file_structure() {
|
||
print_info "验证文件结构..."
|
||
|
||
if [ ! -d "generator" ]; then
|
||
print_error "generator 目录不存在"
|
||
return 1
|
||
fi
|
||
|
||
if [ ! -d "generator/api" ]; then
|
||
print_error "generator/api 目录不存在"
|
||
return 1
|
||
fi
|
||
|
||
if [ ! -d "generator/api_models" ]; then
|
||
print_error "generator/api_models 目录不存在"
|
||
return 1
|
||
fi
|
||
|
||
print_success "文件结构正确"
|
||
}
|
||
|
||
# 验证代码质量
|
||
validate_code_quality() {
|
||
print_info "验证代码质量..."
|
||
|
||
# 检查 generator 目录是否存在
|
||
if [ ! -d "generator" ]; then
|
||
print_warning "generator 目录不存在,跳过代码质量检查"
|
||
return 0
|
||
fi
|
||
|
||
# 运行 dart analyze
|
||
if dart analyze generator/ 2>/dev/null; then
|
||
print_success "静态分析通过"
|
||
else
|
||
print_warning "静态分析发现问题,请检查生成的代码"
|
||
fi
|
||
}
|
||
|
||
# 验证命名规范
|
||
validate_naming_conventions() {
|
||
print_info "验证命名规范..."
|
||
|
||
local errors=0
|
||
|
||
# 检查 API 文件命名
|
||
if [ -d "generator/api" ]; then
|
||
for file in generator/api/*.dart; do
|
||
if [ -f "$file" ]; then
|
||
filename=$(basename "$file")
|
||
if [[ ! "$filename" =~ ^[a-z][a-z0-9_]*_api\.dart$ ]] && [[ "$filename" != "api_client.dart" ]]; then
|
||
print_error "API 文件命名不规范: $filename"
|
||
errors=$((errors + 1))
|
||
fi
|
||
fi
|
||
done
|
||
fi
|
||
|
||
# 检查模型文件命名
|
||
if [ -d "generator/api_models" ]; then
|
||
for file in generator/api_models/*.dart; do
|
||
if [ -f "$file" ]; then
|
||
filename=$(basename "$file")
|
||
if [[ ! "$filename" =~ ^[a-z][a-z0-9_]*\.dart$ ]] && [[ "$filename" != "index.dart" ]]; then
|
||
print_error "模型文件命名不规范: $filename"
|
||
errors=$((errors + 1))
|
||
fi
|
||
fi
|
||
done
|
||
fi
|
||
|
||
if [ $errors -eq 0 ]; then
|
||
print_success "命名规范检查通过"
|
||
else
|
||
print_error "发现 $errors 个命名规范问题"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 验证类型一致性
|
||
validate_type_consistency() {
|
||
print_info "验证类型一致性..."
|
||
|
||
local generator_file="lib/generators/retrofit_api_generator.dart"
|
||
|
||
if [ ! -f "$generator_file" ]; then
|
||
print_warning "生成器文件不存在,跳过类型一致性检查"
|
||
return 0
|
||
fi
|
||
|
||
# 检查是否有硬编码的类型推断
|
||
local hardcoded_patterns=(
|
||
"TaskInfoResult"
|
||
"if.*contains.*login.*return"
|
||
"if.*contains.*task.*return"
|
||
"if.*tag.*contains.*return"
|
||
)
|
||
|
||
local errors=0
|
||
for pattern in "${hardcoded_patterns[@]}"; do
|
||
if grep -qiE "$pattern" "$generator_file"; then
|
||
print_error "发现硬编码类型推断: $pattern"
|
||
errors=$((errors + 1))
|
||
fi
|
||
done
|
||
|
||
if [ $errors -eq 0 ]; then
|
||
print_success "类型一致性检查通过"
|
||
else
|
||
print_error "发现 $errors 个类型一致性问题"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 运行完整验证
|
||
run_full_validation() {
|
||
print_header
|
||
|
||
local total_errors=0
|
||
|
||
check_prerequisites || total_errors=$((total_errors + 1))
|
||
validate_swagger || total_errors=$((total_errors + 1))
|
||
validate_file_structure || total_errors=$((total_errors + 1))
|
||
validate_code_quality || total_errors=$((total_errors + 1))
|
||
validate_naming_conventions || total_errors=$((total_errors + 1))
|
||
validate_type_consistency || total_errors=$((total_errors + 1))
|
||
|
||
echo ""
|
||
echo "=================================================="
|
||
|
||
if [ $total_errors -eq 0 ]; then
|
||
print_success "所有检查通过!代码符合 Augment 规范。"
|
||
exit 0
|
||
else
|
||
print_error "验证失败,发现 $total_errors 个问题。"
|
||
echo ""
|
||
print_info "请参考以下文档进行修复:"
|
||
echo " - 代码生成规范: AUGMENT_CODE_GENERATION_STANDARDS.md"
|
||
echo " - 快速参考指南: QUICK_REFERENCE.md"
|
||
echo " - 代码审查清单: CODE_REVIEW_CHECKLIST.md"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# 显示帮助信息
|
||
show_help() {
|
||
echo "Augment 代码生成规范验证脚本"
|
||
echo ""
|
||
echo "用法:"
|
||
echo " $0 [选项]"
|
||
echo ""
|
||
echo "选项:"
|
||
echo " all, -a, --all 运行所有验证检查(默认)"
|
||
echo " swagger, -s, --swagger 只验证 swagger.json"
|
||
echo " files, -f, --files 只验证文件结构"
|
||
echo " quality, -q, --quality 只验证代码质量"
|
||
echo " naming, -n, --naming 只验证命名规范"
|
||
echo " types, -t, --types 只验证类型一致性"
|
||
echo " help, -h, --help 显示此帮助信息"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 # 运行所有检查"
|
||
echo " $0 swagger # 只验证 swagger.json"
|
||
echo " $0 --quality # 只验证代码质量"
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
case "${1:-all}" in
|
||
all|-a|--all)
|
||
run_full_validation
|
||
;;
|
||
swagger|-s|--swagger)
|
||
print_header
|
||
check_prerequisites
|
||
validate_swagger
|
||
print_success "Swagger 验证完成"
|
||
;;
|
||
files|-f|--files)
|
||
print_header
|
||
validate_file_structure
|
||
print_success "文件结构验证完成"
|
||
;;
|
||
quality|-q|--quality)
|
||
print_header
|
||
validate_code_quality
|
||
print_success "代码质量验证完成"
|
||
;;
|
||
naming|-n|--naming)
|
||
print_header
|
||
validate_naming_conventions
|
||
print_success "命名规范验证完成"
|
||
;;
|
||
types|-t|--types)
|
||
print_header
|
||
validate_type_consistency
|
||
print_success "类型一致性验证完成"
|
||
;;
|
||
help|-h|--help)
|
||
show_help
|
||
;;
|
||
*)
|
||
print_error "未知选项: $1"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# 执行主函数
|
||
main "$@"
|