Aikido

Como remover comentários TODO e FIXME persistentes de sua base de código

Manutenibilidade

Regra
Remover pendentes TODO/FIXME comentários
Não resolvidos TODO e FIXME comentários indicam
incompleto trabalho que pode acumular ao tempo.
Acompanhe problemas em o seu problema rastreador em vez de de deixar em no código.

Idiomas suportados: 45+

Introdução

Comentários TODO e FIXME começam como lembretes úteis, mas rapidamente se tornam elementos permanentes na base de código. O que era para ser uma nota temporária se torna um sinal de alerta que todos ignoram. Esses comentários indicam trabalho inacabado, decisões adiadas ou problemas conhecidos que ninguém acompanhou adequadamente. Quando você entrega código com comentários TODO, você está entregando o reconhecimento de que algo não está certo, sem nenhum plano para corrigi-lo.

Por que isso importa

Manutenibilidade do código: Comentários TODO criam ambiguidade sobre a prontidão e completude do código. Novos membros da equipe não sabem se esses comentários representam problemas urgentes ou anotações antigas que ninguém mais se importa. Quanto mais TODOs se acumulam, menos seriamente são levados, criando um efeito de janelas quebradas onde os padrões de qualidade se deterioram.

Rastreamento de dívida técnica: Problemas ocultos em comentários não são priorizados, atribuídos ou rastreados. Seu sistema de gerenciamento de projetos mostra que tudo está completo, enquanto a base de código contém dezenas de notas "corrigir isso depois". Sem o rastreamento adequado, problemas importantes são esquecidos até que causem problemas em produção.

Implicações de segurança: Comentários TODO às vezes marcam implementações de segurança incompletas ou vulnerabilidades conhecidas. Um comentário como "TODO: adicionar verificação de autenticação" em código de produção significa que você enviou uma falha de segurança com total conhecimento. Esses marcadores tornam mais fácil para atacantes que revisam seu código encontrarem pontos fracos.

Exemplos de código

❌ Não-conforme:

async function processPayment(userId, amount) {
    // TODO: Add fraud detection before processing
    // FIXME: This doesn't handle concurrent payments

    const user = await db.users.findById(userId);

    if (user.balance < amount) {
        throw new Error('Insufficient funds');
    }

    // TODO: Add transaction logging
    user.balance -= amount;
    await user.save();

    return { success: true };
}
 

Por que está errado: Três problemas críticos (detecção de fraude, concorrência, logging) estão marcados, mas não resolvidos, indicando que esta função foi entregue incompleta. Esses comentários documentam problemas conhecidos sem qualquer rastreamento ou cronograma para corrigi-los.

✅ Compatível:

async function processPayment(userId, amount) {
    await fraudDetection.check(userId, amount);

    return await db.transaction(async (trx) => {
        const user = await trx.users
            .findById(userId)
            .forUpdate();

        if (user.balance < amount) {
            throw new Error('Insufficient funds');
        }

        user.balance -= amount;
        await user.save();

        await trx.auditLog.create({
            userId,
            action: 'payment',
            amount,
            timestamp: new Date()
        });

        return { success: true };
    });
}

Por que isso importa: Todos os problemas previamente marcados foram resolvidos. A detecção de fraude está implementada, as transações de banco de dados lidam com a concorrência e o log de auditoria rastreia todos os pagamentos. O código está completo, sem comentários apologéticos sobre o que está faltando.

Conclusão

Remova comentários TODO e FIXME antes de fazer merge do código para produção. Se o trabalho estiver incompleto, finalize-o ou crie issues rastreadas no seu sistema de gerenciamento de projetos com prioridade e atribuição adequadas. Comentários no código são invisíveis para o planejamento do projeto e fazem com que sua base de código pareça perpetuamente inacabada.

FAQs

Dúvidas?

E se eu realmente precisar marcar algo para mais tarde?

Crie uma issue em seu tracker (Jira, GitHub Issues, Linear) com contexto, prioridade e atribuição. Linke o número da issue em um comentário se for necessário: // Veja a issue #1234 para o refactoring planejado. Isso torna o trabalho visível para o gerenciamento de projetos e garante que ele seja priorizado adequadamente.

E se eu realmente precisar marcar algo para mais tarde?

Crie uma issue em seu tracker (Jira, GitHub Issues, Linear) com contexto, prioridade e atribuição. Linke o número da issue em um comentário se for necessário: // Veja a issue #1234 para o refactoring planejado. Isso torna o trabalho visível para o gerenciamento de projetos e garante que ele seja priorizado adequadamente.

Existem usos aceitáveis para comentários TODO?

Em pull requests em rascunho ou branches de feature que ainda não foram mescladas, comentários TODO ajudam a rastrear trabalho incompleto durante o desenvolvimento. Antes de mesclar para a main, complete o trabalho ou converta os TODOs em issues rastreadas. Nunca mescle comentários TODO em branches de produção.

Como lidar com TODOs em código legado?

Audite-os em lotes. Muitos TODOs antigos estão obsoletos ou já foram corrigidos. Para problemas válidos, crie tickets e remova os comentários. Estabeleça uma política de que o novo código não pode adicionar TODOs. Isso evita o acúmulo enquanto você trabalha na dívida técnica existente.

E quanto a comentários HACK ou OPTIMIZE?

Esses sofrem dos mesmos problemas que os comentários TODO. HACK indica código do qual você se envergonha, mas que foi lançado de qualquer forma. OPTIMIZE sugere uma preocupação prematura com o desempenho. Ou corrija o código ou aceite-o como está, sem comentários apologéticos. Documente os requisitos reais de desempenho em tickets, não em comentários de código.

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.