Pular para o conteúdo
EN · PT

Gate: no-duplication

No code block appears copied in two places.

Propriedade Valor
Verificação duplication
Confronta code
Bloqueante por padrão — projeto novo não — informa
Bloqueante por padrão — projeto existente não — informa
gates:
- name: no-duplication
on: [code]
check: duplication

Fonte: verificação · sua spec (em inglês)


Detecta blocos de código idênticos ou quase idênticos copiados em múltiplos arquivos.

Em termos simples: este gate garante que o seu software não cometa erros por descuido ou falta de sincronização. Se você ou uma inteligência artificial alterar um arquivo coberto por este gate, ele inspeciona o trabalho imediatamente.


Código copiado e colado multiplica bugs: ao corrigir em um lugar, os outros continuam vulneráveis.

Sem este gate ativo, esse tipo de defeito passa despercebido pelos testes comuns e só estoura em produção ou durante refatorações dolorosas semanas depois.


Executa ferramentas como jscpd, pmd cpd ou dupl com limiar de tokens duplicados.

  • ✓ Pass (Aprovado): Nenhum bloco duplicado acima do limiar encontrado.
  • ✗ Fail (Reprovado): Bloco duplicado copiado em dois ou mais arquivos.
  • ~ Indeterminado/Pending: Ferramenta não instalada.
  • Skip (Dispensado): Não se aplica.

Para ativar este gate no seu projeto, adicione o bloco abaixo na seção gates: do seu anchors.yaml:

gates:
- name: no-duplication
on: [code]
scope: project
run: "npx --yes jscpd . --reporters console --silent"
needs_tool: jscpd
blocking: false
when: [ci]

  • Quando ativar: Informativo no início; promova a bloqueante após refatorar trechos repetidos.
  • Fase de execução: Configure em when: [pre-commit, ci] para verificações rápidas, ou when: [pre-push, ci] para gates que rodam ferramentas mais pesadas.
  • Transição de maturidade: Comece com blocking: false para avaliar o estado atual do repositório com anchors check. Quando zerar as ocorrências, altere para blocking: true.

Se o anchors check acusar falha (✗) neste gate:

  1. Extraia o bloco duplicado para uma função auxiliar ou módulo compartilhado.
  2. Reexecute a verificação no terminal:
    Terminal window
    anchors check
  3. Se o gate suportar correção automática, você pode tentar o comando:
    Terminal window
    anchors check --fix