Cosa fa questo strumento
Confronta due pezzi di testo e mostra le differenze affiancate o come un diff unificato. Toggle opzionali ignorano gli spazi iniziali/finali e ignorano la casa. Il diff viene calcolato sulle righe (non sui caratteri), che è ciò che vuoi per codice, config e prosa.
Quando usarlo
- Individuare cosa è cambiato tra due risposte API.
- Rivedere modifiche a un file di config quando non hai la versione in git.
- Confrontare due messaggi di errore per trovare la parola che differisce.
- Verificare la sanità che un round-trip di copia-incolla non abbia inserito caratteri invisibili.
Come funziona
L'algoritmo è un calcolo di sotto-sequenza comune più lunga (LCS), che è lo stesso approccio che usa git diff. La complessità è circa O(n × m) nei conteggi di righe, quindi cappiamo gli input a 2.500 righe per lato per mantenere la performance prevedibile. Le righe corrispondenti vengono accoppiate; le righe che esistono solo da un lato sono segnalate come aggiunte o cancellazioni.
Note
Perché riga per riga e non carattere per carattere? Perché la maggior parte dei diff reali riguardano righe. I diff a livello carattere sono rumorosi su qualsiasi cosa più lunga di una frase. Se ti serve un vero diff carattere, usa git diff --word-diff in locale.
Ignorare gli spazi ignora i tab vs spazi? Sì — quel toggle tratta qualsiasi sequenza di spazi bianchi come equivalente a qualsiasi altra, il che è utile quando un file è stato riformattato ma il contenuto è altrimenti lo stesso.
Cosa succede oltre 2.500 righe? Lo strumento si rifiuta di renderizzare e ti chiede di tagliare. LCS è quadratico; a 100k righe congeleresti il tab per minuti.
Strumenti correlati
- Formatter JSON — pretty-print prima, poi diff
- JSON ↔ YAML — converti in una forma stabile prima di differ