File size: 3,570 Bytes
1cc4e55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import gradio as gr
import re

def analyze_code(code, language):
    """
    Função simples de análise de código - versão inicial
    """
    feedback = f"🔍 **Análise de Código {language}**\n\n"
    
    # Análises básicas
    issues = []
    suggestions = []
    
    # Verificações genéricas
    if len(code.strip()) == 0:
        return "❌ Por favor, insira algum código para análise."
    
    # Análise de complexidade básica
    lines = code.split('\n')
    if len(lines) > 50:
        issues.append("Código muito longo - considere dividir em funções menores")
    
    # Verificação de comentários
    comment_count = sum(1 for line in lines if line.strip().startswith(('#', '//', '/*', '*')))
    if comment_count < len(lines) * 0.1:  # Menos de 10% de comentários
        suggestions.append("Adicione mais comentários para melhorar a documentação")
    
    # Linguagem específica
    if language == "Python":
        if "print(" in code and "def " in code:
            suggestions.append("Considere usar logging em vez de print para funções")
        if "except:" in code:
            issues.append("Evite 'except:' genérico - especifique exceções")
    
    elif language == "JavaScript":
        if "==" in code and "===" not in code:
            suggestions.append("Prefira '===' para comparação estrita")
        if "var " in code:
            issues.append("Use 'let' ou 'const' em vez de 'var'")
    
    # Montar feedback
    if issues:
        feedback += "⚠️ **Problemas identificados:**\n"
        for issue in issues:
            feedback += f"• {issue}\n"
        feedback += "\n"
    
    if suggestions:
        feedback += "💡 **Sugestões de melhoria:**\n"
        for suggestion in suggestions:
            feedback += f"• {suggestion}\n"
        feedback += "\n"
    
    if not issues and not suggestions:
        feedback += "✅ Código parece bem estruturado! Bom trabalho!"
    
    feedback += f"\n📊 **Estatísticas:** {len(lines)} linhas, {comment_count} comentários"
    
    return feedback

# Interface Gradio
with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("# 🤖 Code Review Assistant")
    gr.Markdown("Cole seu código abaixo para receber feedback automático!")
    
    with gr.Row():
        with gr.Column():
            code_input = gr.Textbox(
                label="Seu Código",
                placeholder="Cole seu código aqui...",
                lines=15,
                max_lines=20
            )
            language_dropdown = gr.Dropdown(
                choices=["Python", "JavaScript", "Java", "Go", "C++", "TypeScript"],
                label="Linguagem",
                value="Python"
            )
            analyze_btn = gr.Button("Analisar Código 🚀")
        
        with gr.Column():
            output = gr.Textbox(
                label="Feedback do Review",
                lines=20,
                max_lines=25,
                interactive=False
            )
    
    # Conectar função ao botão
    analyze_btn.click(
        fn=analyze_code,
        inputs=[code_input, language_dropdown],
        outputs=output
    )
    
    # Exemplos
    gr.Markdown("### 📝 Exemplos para testar:")
    gr.Examples(
        examples=[
            ["def soma(a, b):\n    return a + b", "Python"],
            ["function getUser(id) {\n    return users.find(u => u.id === id)\n}", "JavaScript"]
        ],
        inputs=[code_input, language_dropdown]
    )

# Iniciar a interface
if __name__ == "__main__":
    demo.launch()