| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """跨层导入检查脚本。用法: python scripts/check_imports.py"""
- import sys
- import io
- from pathlib import Path
- # Windows 控制台编码兼容
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
- ROOT = Path(__file__).parent.parent
- violations = 0
- RULES = [
- {
- "name": "views/ 禁止直接导入 foundation/database/",
- "check_dirs": ["views"],
- "forbidden": ["foundation.database"],
- },
- {
- "name": "reviewers/ 禁止直接导入 foundation/database/",
- "check_dirs": [
- "core/construction_review/component/reviewers",
- "core/construction_review/component/doc_worker",
- ],
- "forbidden": ["foundation.database"],
- },
- ]
- for rule in RULES:
- print(f"\n检查: {rule['name']}")
- for check_dir in rule["check_dirs"]:
- full_dir = ROOT / check_dir
- if not full_dir.exists():
- print(f" 跳过(目录不存在): {check_dir}")
- continue
- for py_file in full_dir.rglob("*.py"):
- try:
- content = py_file.read_text(encoding="utf-8")
- except Exception:
- continue
- for pattern in rule["forbidden"]:
- import_line = f"from {pattern}"
- if import_line in content:
- print(f" ❌ {py_file.relative_to(ROOT)}")
- violations += 1
- if violations:
- print(f"\n共发现 {violations} 处跨层导入违规")
- sys.exit(1)
- else:
- print("\n跨层导入检查通过")
|