code-review / app.py
Daniel251's picture
Create app.py
1cc4e55 verified
Raw
History Blame Contribute Delete
3.57 kB
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()