File size: 3,069 Bytes
38bc0dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import argparse
import sys
import os

try:
    sys.stdout.reconfigure(encoding='utf-8')
    sys.stderr.reconfigure(encoding='utf-8')
except Exception:
    pass

from scoring_api import evaluate
from phase2.optimization import IterativeOptimizer

def display_results(initial_code, result):
    print("\n" + "="*60)
    print(" πŸš€ AI CODE MAINTAINABILITY ENGINE (Unified Pipeline) πŸš€")
    print("="*60)
    
    print("\nπŸ“ [ORIGINAL CODE]\n")
    print(initial_code.strip())
    
    # Phase 1: Evaluate initial code directly
    print("\nπŸ” [PHASE 1: INITIAL SCORING]")
    initial_score_result = evaluate(initial_code)
    print(f"Risk Score:  {initial_score_result['risk_score']}")
    print(f"Risk Level:  {initial_score_result['risk_level']}")
    if initial_score_result.get('top_risk_factors'):
        print("Details:")
        for factor in initial_score_result['top_risk_factors']:
            print(f"  - {factor}")

    # Phase 2: Show Optimization Results
    print("\nπŸ› οΈ  [PHASE 2: AUTONOMOUS REFACTORING]")
    if result['iterations_run'] == 0:
        print("No optimization was needed (code already meets target maintainability score).")
    else:
        print(f"Completed {result['iterations_run']} refinement iteration(s).")
        print("\n✨ [REFACTORED CODE]\n")
        print(result['final_code'].strip())
        
        print("\nπŸ“Š [FINAL METRICS]")
        print(f"Original Score: {initial_score_result['risk_score']}")
        print(f"Final Score:    {result['final_score']}")
        
        if result['final_score'] < initial_score_result['risk_score']:
            print(f"πŸŽ‰ Success! Maintainability improved by {initial_score_result['risk_score'] - result['final_score']} points.")
        else:
            print("⚠️ Code was refactored, maintainability score remained optimal.")
            
    print("\n" + "="*60 + "\n")

def main():
    parser = argparse.ArgumentParser(description="AI Code Maintainability Scoring & Refactoring Engine")
    parser.add_argument("file", nargs="?", help="Path to the Python file to analyze and refactor.")
    args = parser.parse_args()

    if args.file:
        if not os.path.exists(args.file):
            print(f"Error: File '{args.file}' not found.")
            sys.exit(1)
        with open(args.file, "r", encoding="utf-8") as f:
            code = f.read()
    else:
        # Default fallback example
        code = '''
def process_data(data_list):
    results = []
    for i in range(len(data_list)):
        if data_list[i] > 0:
            if data_list[i] % 2 == 0:
                results.append(data_list[i])
    return results
'''
    print("Initializing Unified Maintainability Engine...")
    try:
        optimizer = IterativeOptimizer(target_score=10.0, max_iterations=2)
        
        print("Analyzing and Refactoring code...")
        result = optimizer.optimize(code)
        
        display_results(code, result)
        
    except Exception as e:
        print(f"\nError during engine execution: {e}")

if __name__ == "__main__":
    main()