Utilia

Comparador de código (diff)

Compara duas versões de código lado a lado ou numa coluna, com realce de sintaxe, números de linha, opções de espaços e um diff unificado para copiar.

Como comparar dois excertos de código

  1. Cola a versão antiga em Código original e a nova em Código alterado.
  2. Escolhe a Linguagem ou deixa Detetar automaticamente: a ferramenta adivinha-a a partir do código e mostra a linguagem detetada ao lado das estatísticas.
  3. Escolhe uma Vista: Lado a lado ou Numa coluna (unificada).
  4. Define as opções de que precisas: Ignorar espaços e indentação, Ignorar maiúsculas e minúsculas, Realçar palavras alteradas e Mostrar só as alterações (3 linhas de contexto).
  5. Clica em Comparar. Depois da primeira comparação, o resultado acompanha as tuas edições enquanto escreves.
  6. Clica em Copiar como diff unificado ou Transferir .diff para reutilizar a alteração como patch.

Trocar os lados troca as duas versões, o que transforma as adições em remoções e vice-versa.

Ler o diff

As linhas removidas ficam a vermelho e pertencem ao original; as linhas adicionadas ficam a verde e pertencem à nova versão. Cada linha mantém o número de linha do seu próprio ficheiro, para poderes ir diretamente a ela no teu editor.

  • Lado a lado coloca os dois ficheiros em duas colunas numeradas. Uma linha modificada fica ao lado da sua nova versão. Com Realçar palavras alteradas, as palavras que mudaram dentro dessa linha são assinaladas; sem essa opção, as duas linhas mantêm todas as cores de sintaxe.
  • Numa coluna (unificada) mostra uma única coluna, como numa revisão de código: em cada bloco alterado, vêm primeiro as linhas removidas (−) e depois as adicionadas (+), com os números de linha antigos e novos.
  • Mostrar só as alterações (3 linhas de contexto) dobra os trechos longos sem alterações num marcador «⋯ N linhas sem alterações», o que torna muito mais fácil rever ficheiros grandes.

A linha de estatísticas conta as linhas adicionadas, removidas e iguais.

Realce de sintaxe

O realce é feito no teu navegador com o highlight.js. Só é carregada a gramática da linguagem escolhida, quando comparas pela primeira vez, para que a página se mantenha leve. As linguagens suportadas incluem JavaScript, TypeScript, Python, Java, C#, C / C++, Go, Rust, PHP, Ruby, CSS, HTML / XML, JSON, YAML, SQL, Bash / Shell e Markdown. A deteção automática usa pistas simples (palavras-chave, chavetas, análise de JSON); se errar, escolhe tu a linguagem ou seleciona Texto simples.

Espaços, indentação e fins de linha

Ignorar espaços e indentação compara as linhas depois de lhes retirar os espaços das pontas e de reduzir as sequências de espaços e tabulações, por isso um ficheiro reindentado de 2 para 4 espaços, ou de tabulações para espaços, não mostra diferenças. Os fins de linha do Windows (CRLF) e do Unix (LF) são normalizados antes da comparação, por isso um ficheiro em que só mudaram os fins de linha é dado como idêntico. Atenção: os espaços podem ser importantes em Python, YAML e Makefiles; desliga a opção quando a indentação tiver significado.

O formato diff unificado

O patch exportado usa o formato unificado padrão, lido pelo git apply, pelo patch e pelas ferramentas de revisão de código: um cabeçalho com os nomes dos dois ficheiros e depois blocos (hunks) que começam por @@ -a,b +c,d @@, com três linhas de contexto à volta de cada alteração. Os ficheiros chamam-se original e changed, com a extensão da linguagem.

Perguntas frequentes

O meu código é enviado para um servidor?

Não. A comparação e o realce correm ambos localmente no teu navegador; o código nunca sai do teu dispositivo.

Em que difere do comparador de texto?

Usa o mesmo motor de comparação linha a linha, mas acrescenta realce de sintaxe, uma vista unificada, a dobragem do contexto e um tratamento dos espaços pensado para código.

Porque é que duas linhas aparecem como alteradas se parecem idênticas?

Provavelmente diferem em caracteres invisíveis: espaços no fim da linha, tabulações em vez de espaços ou um espaço inseparável. Marca Ignorar espaços e indentação para confirmar.

Posso aplicar o patch transferido com o Git?

Sim. Guarda-o e executa patch original.js < changes.diff, ou adapta os nomes dos ficheiros no cabeçalho e usa git apply.

Qual pode ser o tamanho dos excertos?

Vários milhares de linhas comparam-se depressa. Se dois ficheiros muito grandes forem completamente diferentes, a ferramenta para ao fim de alguns segundos e pede-te que compares partes mais pequenas.