新增反思功能(功能配置接口+反思celery后台检测反思的迭代周期) * fix/memory_reflection: (24 commits squashed) - 新增反思功能(功能配置接口+反思celery后台检测反思的迭代周期) - 新增反思功能(功能配置接口+反思celery后台检测反思的迭代周期) - 新增反思功能(检测代码/规范化程序) - 新增反思功能(检测代码/规范化程序) - 新增反思功能(检测代码/规范化程序) - 新增反思功能(检测代码/规范化程序) - 新增反思功能(检测代码/规范化程序) - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 - 反思优化 Signed-off-by: aliyun8644380055 <accounts_68c0f5d519f260d93ee2997e@mail.teambition.com> Commented-by: aliyun8644380055 <accounts_68c0f5d519f260d93ee2997e@mail.teambition.com> Commented-by: aliyun6762716068 <accounts_68cb7c6b61f5dcc4200d6251@mail.teambition.com> Reviewed-by: aliyun6762716068 <accounts_68cb7c6b61f5dcc4200d6251@mail.teambition.com> Merged-by: aliyun6762716068 <accounts_68cb7c6b61f5dcc4200d6251@mail.teambition.com> CR-link: https://codeup.aliyun.com/redbearai/python/redbear-mem-open/change/9
109 lines
3.3 KiB
Python
Executable File
109 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
代码质量检查脚本
|
|
自动检查代码中的导入错误、未使用变量、语法问题等
|
|
|
|
用法:
|
|
python check_code.py # 检查整个 app/ 目录
|
|
python check_code.py file1.py file2.py # 检查指定文件
|
|
"""
|
|
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def run_command(cmd: list[str], description: str) -> tuple[bool, str]:
|
|
"""运行命令并返回结果"""
|
|
print(f"\n{'=' * 60}")
|
|
print(f"🔍 {description}")
|
|
print(f"{'=' * 60}")
|
|
|
|
try:
|
|
result = subprocess.run(cmd, capture_output=True, text=True, check=False)
|
|
|
|
output = result.stdout + result.stderr
|
|
success = result.returncode == 0
|
|
|
|
if success:
|
|
print(f"✅ {description} - 通过")
|
|
else:
|
|
print(f"❌ {description} - 发现问题")
|
|
if output:
|
|
print(output[:2000]) # 只显示前2000字符
|
|
|
|
return success, output
|
|
|
|
except Exception as e:
|
|
print(f"❌ 执行失败: {e}")
|
|
return False, str(e)
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
# 获取命令行参数中的文件列表
|
|
target_files = sys.argv[1:] if len(sys.argv) > 1 else None
|
|
|
|
if target_files:
|
|
# 检查指定文件
|
|
print(f"🚀 开始代码质量检查 (指定文件: {len(target_files)} 个)...")
|
|
target_paths = target_files
|
|
ruff_target = target_files
|
|
py_compile_files = [f for f in target_files if f.endswith('.py')]
|
|
else:
|
|
# 检查整个 app/ 目录
|
|
print("🚀 开始代码质量检查 (整个 app/ 目录)...")
|
|
target_paths = ["app/"]
|
|
ruff_target = ["app/"]
|
|
py_compile_files = list(Path("app").rglob("*.py"))
|
|
|
|
checks = [
|
|
{
|
|
"cmd": ["ruff", "check"] + ruff_target + ["--output-format=concise"],
|
|
"description": "Ruff 代码检查 (导入、语法、风格)",
|
|
"auto_fix": ["ruff", "check"] + ruff_target + ["--fix", "--unsafe-fixes"],
|
|
},
|
|
{
|
|
"cmd": ["python", "-m", "py_compile"] + [str(f) for f in py_compile_files],
|
|
"description": "Python 语法检查",
|
|
"auto_fix": None,
|
|
},
|
|
]
|
|
|
|
results = []
|
|
for check in checks:
|
|
success, output = run_command(check["cmd"], check["description"])
|
|
results.append(
|
|
{"name": check["description"], "success": success, "output": output, "auto_fix": check.get("auto_fix")}
|
|
)
|
|
|
|
# 汇总报告
|
|
print(f"\n{'=' * 60}")
|
|
print("📊 检查汇总")
|
|
print(f"{'=' * 60}")
|
|
|
|
all_passed = True
|
|
for result in results:
|
|
status = "✅ 通过" if result["success"] else "❌ 失败"
|
|
print(f"{status} - {result['name']}")
|
|
if not result["success"]:
|
|
all_passed = False
|
|
if result["auto_fix"]:
|
|
print(f" 💡 可以运行自动修复: {' '.join(result['auto_fix'])}")
|
|
|
|
if all_passed:
|
|
print("\n🎉 所有检查通过!")
|
|
return 0
|
|
else:
|
|
print("\n⚠️ 发现问题,请查看上面的详细信息")
|
|
print("\n💡 快速修复命令:")
|
|
if target_files:
|
|
print(f" ruff check {' '.join(target_files)} --fix --unsafe-fixes")
|
|
else:
|
|
print(" ruff check app/ --fix --unsafe-fixes")
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|