Checklist de Code Review com Claude Code
Um checklist prático de code review usando o Claude Code para melhorar a qualidade do código.
Eficientizando o Code Review com Claude Code
O code review é um processo importante para manter a qualidade, mas a carga sobre os revisores é um desafio. Com o Claude Code, é possível realizar reviews eficientes baseados em checklists sistemáticos.
Verificação de Segurança
> Revise o código deste PR do ponto de vista de segurança.
> Verifique XSS, SQL injection e vulnerabilidades de autenticação.
// Checklist de segurança
const securityChecks = {
// 1. Validação de entrada
inputValidation: {
check: 'A entrada do usuário está sanitizada?',
bad: `element.innerHTML = userInput;`,
good: `element.textContent = userInput;`,
},
// 2. SQL Injection
sqlInjection: {
check: 'Queries parametrizadas estão sendo usadas?',
bad: `db.query(\`SELECT * FROM users WHERE id = \${userId}\`);`,
good: `db.query('SELECT * FROM users WHERE id = ?', [userId]);`,
},
// 3. Autenticação e Autorização
auth: {
check: 'Os endpoints da API possuem middleware de autenticação?',
bad: `app.get('/api/admin/users', handler);`,
good: `app.get('/api/admin/users', requireAuth, requireAdmin, handler);`,
},
// 4. Exposição de informações secretas
secrets: {
check: 'Variáveis de ambiente não estão vazando para o cliente?',
bad: `const apiKey = "sk-1234567890abcdef";`,
good: `const apiKey = process.env.API_KEY;`,
},
};
Verificação de Performance
// Checklist de performance
const performanceChecks = [
{
item: 'Não há consultas N+1?',
bad: `
const users = await db.user.findMany();
for (const user of users) {
const posts = await db.post.findMany({ where: { userId: user.id } });
}`,
good: `
const users = await db.user.findMany({
include: { posts: true },
});`,
},
{
item: 'Não há re-renderizações desnecessárias?',
bad: `
function Component() {
const handler = () => doSomething();
return <Child onClick={handler} />;
}`,
good: `
function Component() {
const handler = useCallback(() => doSomething(), []);
return <Child onClick={handler} />;
}`,
},
{
item: 'A virtualização está aplicada a listas grandes?',
check: 'Listas com mais de 1000 itens -> considerar react-virtual',
},
];
Verificação de Legibilidade e Manutenibilidade
> Faça sugestões para melhorar a legibilidade deste código.
> Verifique convenções de nomenclatura, tamanho de funções e adequação dos comentários.
// Pontos de verificação de legibilidade
// 1. Tamanho da função (ideal abaixo de 30 linhas)
// ❌ Todo o processamento em uma única função
async function processOrder(order: Order) {
// 100 linhas de processamento...
}
// ✅ Dividido por responsabilidade
async function processOrder(order: Order) {
const validated = validateOrder(order);
const priced = calculateTotal(validated);
const payment = await processPayment(priced);
return createConfirmation(payment);
}
// 2. Padrão de retorno antecipado
// ❌ Aninhamento profundo
function getDiscount(user: User) {
if (user) {
if (user.isPremium) {
if (user.orders > 10) {
return 0.2;
}
return 0.1;
}
return 0.05;
}
return 0;
}
// ✅ Retorno antecipado
function getDiscount(user: User) {
if (!user) return 0;
if (!user.isPremium) return 0.05;
if (user.orders > 10) return 0.2;
return 0.1;
}
// 3. Eliminar números mágicos
// ❌
if (status === 3) { /* ... */ }
// ✅
const ORDER_STATUS = { PENDING: 1, PROCESSING: 2, COMPLETED: 3 } as const;
if (status === ORDER_STATUS.COMPLETED) { /* ... */ }
Verificação de Tratamento de Erros
// Pontos de verificação do tratamento de erros
// ❌ Engolindo o erro
try {
await saveData(data);
} catch (e) {
// Não faz nada
}
// ✅ Tratamento adequado de erro
try {
await saveData(data);
} catch (error) {
logger.error('Falha ao salvar dados', { error, data: data.id });
throw new AppError('SAVE_FAILED', 'Falha ao salvar os dados', { cause: error });
}
Script de Automação de Review
// scripts/review-check.ts
import { execSync } from 'child_process';
interface ReviewIssue {
file: string;
line: number;
severity: 'error' | 'warning' | 'info';
message: string;
}
function checkForIssues(): ReviewIssue[] {
const issues: ReviewIssue[] = [];
const diff = execSync('git diff --cached --name-only').toString().split('\n');
for (const file of diff.filter(f => f.endsWith('.ts') || f.endsWith('.tsx'))) {
const content = execSync(`git show :${file}`).toString();
const lines = content.split('\n');
lines.forEach((line, index) => {
// Verificação de console.log
if (line.includes('console.log') && !file.includes('scripts/')) {
issues.push({
file, line: index + 1, severity: 'warning',
message: 'console.log restante encontrado',
});
}
// Verificação de TODO/FIXME
if (/\/\/\s*(TODO|FIXME|HACK)/i.test(line)) {
issues.push({
file, line: index + 1, severity: 'info',
message: 'Comentário TODO/FIXME encontrado',
});
}
// Verificação de tipo any
if (/:\s*any\b/.test(line)) {
issues.push({
file, line: index + 1, severity: 'warning',
message: 'Tipo any está sendo usado',
});
}
});
}
return issues;
}
const issues = checkForIssues();
issues.forEach(i => console.log(`[${i.severity}] ${i.file}:${i.line} - ${i.message}`));
Resumo
O code review está intimamente relacionado com estratégias de teste. Com o Claude Code, é possível realizar reviews sistemáticos e eficientes do ponto de vista de segurança, performance e legibilidade. Combinando com técnicas de programação em par com IA, você pode equilibrar qualidade e velocidade no review. Para melhores práticas de code review, consulte o Google Engineering Practices.
Related Posts
10 Dicas para Triplicar Sua Produtividade com o Claude Code
Descubra 10 dicas práticas para aproveitar melhor o Claude Code. De estratégias de prompt a atalhos de workflow, essas técnicas vão aumentar sua eficiência a partir de hoje.
Otimização de Canvas/WebGL com Claude Code
Aprenda sobre otimização de Canvas/WebGL usando o Claude Code. Dicas práticas e exemplos de código incluídos.
Markdown Implementation with Claude Code
Aprenda sobre markdown implementation usando o Claude Code. Dicas praticas e exemplos de codigo incluidos.