refactoring_engine module
מדיניות וקונפיגורציה
המנוע מיישם קיבוץ לפי קוהזיה כדי למנוע Oversplitting ולהימנע מ-God Class:
קיבוץ לפי דומיין (
io,helpers,compute) + תתי-קבוצות לפי prefixמיזוג קבוצות קטנות לפי תלות (Affinity)
יעד מספר קבוצות: 3–5, עם סף מינימלי של 2 פונקציות בקבוצה
בסנריו של קובץ קטן עם פונקציה אחת בלבד אבל עם כותרות/מחלקות בסקשנים שונים, המנוע יוצר קבוצות סקאפולדינג לפי הסקשן כדי לשמר לפחות שני מודולי דומיין וכך לאפשר מנגנון מיזוג מעגלי הייבוא
שדות קונפיגורציה זמינים במחלקה RefactoringEngine:
class RefactoringEngine:
preferred_min_groups: int = 3
preferred_max_groups: int = 5
absolute_max_groups: int = 8
min_functions_per_group: int = 2
מקרה מיוחד: Safe Decomposition ל‑models.py
כאשר קובץ הקלט הוא models.py והוא כולל מחלקות בלבד (אין פונקציות טופ‑לבל), המנוע מבצע פיצול בטוח לתת‑מודולים דומייניים תחת models/:
סיווג מחלקות לדומיינים:
core,billing,inventory(ולפי צורךnetwork/workflows), על בסיס יוריסטיקות שם/סקשן.יצירת קבצים:
models/core.py,models/billing.py,models/inventory.py.יצירת
models/__init__.pyעם re‑exports לשמירת תאימות (ייבוא מ‑modelsימשיך לעבוד).הזרקת יבוא בין‑מודולי למחלקות נדרשות (למשל:
from .core import Userבתוךbilling.py).Dry‑Run Tarjan SCC לזיהוי מעגליות בתוך
models/בלבד ומיזוג נקודתי במקרה של מעגל.
ממשק פנימי רלוונטי:
_split_models_monolith()– בונה את חבילתmodels/והקבצים הדומייניים._inject_cross_module_class_imports()– הזרקת imports למחלקות בין מודולים פנימיים._resolve_circular_imports()– DRY‑Run לזיהוי ומיזוג נקודתי של מעגליות בייבוא.
מנוע רפקטורינג אוטומטי מבצע שינויי מבנה בקוד בצורה בטוחה
- class refactoring_engine.RefactorType(value)[מקור]
Bases:
Enumסוגי רפקטורינג נתמכים
- SPLIT_FUNCTIONS = 'split_functions'
- EXTRACT_FUNCTIONS = 'extract_functions'
- MERGE_SIMILAR = 'merge_similar'
- CONVERT_TO_CLASSES = 'convert_to_classes'
- DEPENDENCY_INJECTION = 'dependency_injection'
- class refactoring_engine.FunctionInfo(name, start_line, end_line, args, returns, decorators, docstring, calls, called_by=<factory>, code='', complexity=0, section=None)[מקור]
Bases:
objectמידע על פונקציה
- פרמטרים:
- __init__(name, start_line, end_line, args, returns, decorators, docstring, calls, called_by=<factory>, code='', complexity=0, section=None)
- class refactoring_engine.ClassInfo(name, start_line, end_line, methods, attributes, base_classes, decorators, docstring, code='', section=None)[מקור]
Bases:
objectמידע על מחלקה
- פרמטרים:
-
methods:
List[FunctionInfo]
- __init__(name, start_line, end_line, methods, attributes, base_classes, decorators, docstring, code='', section=None)
- class refactoring_engine.RefactorProposal(refactor_type, original_file, new_files, description, changes_summary, warnings=<factory>, imports_needed=<factory>)[מקור]
Bases:
objectהצעת רפקטורינג
- פרמטרים:
-
refactor_type:
RefactorType
- __init__(refactor_type, original_file, new_files, description, changes_summary, warnings=<factory>, imports_needed=<factory>)
- class refactoring_engine.RefactorResult(success, proposal, error=None, validation_passed=False)[מקור]
Bases:
objectתוצאת רפקטורינג
- פרמטרים:
success (bool)
proposal (RefactorProposal | None)
error (str | None)
validation_passed (bool)
-
proposal:
Optional[RefactorProposal]
- __init__(success, proposal, error=None, validation_passed=False)
- פרמטרים:
success (bool)
proposal (RefactorProposal | None)
error (str | None)
validation_passed (bool)
- Return type:
None
- class refactoring_engine.CodeAnalyzer(code, filename='unknown.py')[מקור]
Bases:
objectמנתח קוד Python
- class refactoring_engine.RefactoringEngine[מקור]
Bases:
objectמנוע רפקטורינג
-
CANONICAL_DOMAIN_PRIORITY:
Dict[str,int] = {'finance': 1, 'inventory': 2, 'network': 3, 'users': 0, 'workflows': 4}
-
CANONICAL_DOMAIN_PRIORITY: