Checklist de Code Review para Zig

Checklist de Code Review para Zig

Code review em Zig tem aspectos únicos: gerenciamento manual de memória, error unions, comptime e allocators explícitos exigem atenção especial. Este checklist cobre os pontos mais importantes.

1. Gerenciamento de Memória

// VERIFICAR: todo alloc tem um free correspondente?
const dados = try allocator.alloc(u8, 1024);
defer allocator.free(dados); // OK

// VERIFICAR: errdefer para limpeza em caso de erro?
const buffer = try allocator.alloc(u8, 4096);
errdefer allocator.free(buffer); // Limpa se o restante falhar
const resultado = try processarBuffer(buffer);

Perguntas:

  • Todo alloc tem defer free ou errdefer free?
  • Structs com init() tem deinit()?
  • errdefer está sendo usado para limpeza de recursos?
  • O allocator correto está sendo usado?

2. Tratamento de Erros

// RUIM: ignorar erro
_ = funcao() catch {};

// BOM: tratar ou logar
funcao() catch |err| {
    std.log.err("Falha em funcao: {}", .{err});
    return err;
};

// VERIFICAR: try está propagando corretamente?
pub fn processo() !void {
    try passo1();
    try passo2(); // Se falhar, errdfer de passo1 executa?
    try passo3();
}

3. Performance

// VERIFICAR: alocações desnecessárias no hot path?
for (items) |item| {
    // RUIM: aloca em cada iteração
    const temp = try allocator.alloc(u8, item.len);
    defer allocator.free(temp);
}

// BOM: reutilizar buffer
var buffer = std.ArrayList(u8).init(allocator);
defer buffer.deinit();
for (items) |item| {
    buffer.clearRetainingCapacity();
    try buffer.appendSlice(item);
}

4. Estilo e Legibilidade

  • zig fmt foi executado?
  • Nomes de variáveis em português ou inglês consistente?
  • Funções têm docstrings?
  • Constantes nomeadas em vez de magic numbers?

5. Testes

  • Testes unitários para a lógica nova?
  • Edge cases testados (empty slice, null, overflow)?
  • std.testing.allocator usado nos testes (detecta leaks)?

6. Segurança

  • Sem dados sensíveis em logs?
  • Input externo validado antes de usar?
  • Buffer sizes verificados antes de cópia?
  • Sem @ptrCast desnecessário?

Conclusão

Code review em Zig foca em memória, erros e performance. A checklist acima cobre os erros mais comuns e pode ser adaptada para as necessidades do seu time.

Conteúdo Relacionado

Continue aprendendo Zig

Explore mais tutoriais e artigos em português para dominar a linguagem Zig.