Entwicklertools · Textvergleich
Was „Leerzeichen ignorieren“ bei einem zeilenweisen Textunterschied wirklich ignoriert
· Wie es funktioniert
Text-Diff Entwickler-Workflow Leerzeichen
Zerlegt die Arten von Leerzeichen, die durch einen Vergleich normalisiert werden können, von der Einrückung am Anfang bis hin zu internen Verläufen, und warnt, wo Leerzeichen eine Bedeutung haben und nicht ignoriert werden sollten.
Jede Zeile hat sich geändert, aber nichts hat sich wirklich geändert. Die Datei wird mit einer von Tabulatoren zu Leerzeichen neu eingerückten Datei geöffnet, die als Wand aus Unterschieden erscheint
Ein Formatierer ändert die Einrückung um vier Leerzeichen in zwei Leerzeichen und ein Zeilenunterschied stellt die gesamte Datei als geändert dar. Da es sich bei der Änderung möglicherweise um visuelles Rauschen handelt, kann eine Leerzeichen-unabhängige Ansicht einem Prüfer dabei helfen, tatsächliche Änderungen zu finden. Aber „gleicher Text ohne Leerzeichen“ ist nicht dasselbe wie „gleiches Programm“. Vergleichen Sie die normale und die normalisierte Ansicht miteinander, bevor Sie eine Konfiguration oder eine Quelldatei genehmigen.
Vier Arten von Leerzeichenunterschieden – trennt führende Einzüge, nachgestellte Leerzeichen, interne Zeilen und Leerzeilen, da jede durch ein anderes Werkzeug oder eine andere Gewohnheit verursacht wird
An mehreren Stellen treten Leerzeichenänderungen auf. Der führende Einzug ist oft auf die Formatierung zurückzuführen; nachgestellte Leerzeichen beim Kopieren/Einfügen; Wiederholte Leerzeichen oder Tabulatoren innerhalb einer Zeile können Wörter oder Spalten trennen. Eine Leerzeile kann Blöcke teilen. Mit der Option „Leerzeichen ignorieren“ von ToolAcre wird jede Zeile gekürzt und jede interne Reihe von Leerzeichen zum Vergleich auf ein Leerzeichen reduziert. Es werden nicht einfach alle Leerzeichen entfernt oder unterschiedliche Zeilenanzahlen als identisch behandelt: Zwei Leerzeilen bleiben zwei Vergleichseinheiten, sofern sie nicht durch eine andere Operation entfernt werden.
Wie die Normalisierung vor dem Vergleich erfolgt – erklärt, dass die Option jede Zeile zum Abgleich in eine kanonische Form umwandelt, während Ihr Originaltext das ist, was Sie lesen
Aus dem Originaltext wird vor dem Abgleich ein Zeilenschlüssel berechnet: trim() entfernt führende/nachgestellte Leerzeichen und ein regulärer Ausdruck ersetzt interne Zeilen durch ein Leerzeichen. Der Diff-Algorithmus vergleicht Schlüssel, behält aber den Originaltext in den angezeigten Zeilen bei. Gängige Präfixe und Suffixe werden vor dem Erstellen der LCS-Tabelle verworfen, sodass kleine Änderungen in großen Dokumenten nicht unbedingt den Vergleich jeder Zeile mit jeder anderen erfordern. Es gibt eine Obergrenze von 2.000 unterschiedlichen Zeilen, da eine Tabelle mit dynamischer Programmierung mit beiden Seitenlängen wächst.
Ausgearbeitetes Beispiel: eine neu eingerückte Python-Funktion und eine YAML-Datei – zeigt die Option zum Bereinigen der Python-Ansicht und anschließendes Ausblenden einer YAML-Einrückungsänderung, die tatsächlich die Struktur des Dokuments ändert
Stellen Sie sich eine Python-Funktion vor, deren gesamter Körper sich von vier Leerzeichen auf zwei ändert, während die Verschachtelungsebene unverändert bleibt. Das Ignorieren der Einrückung kann dieses Formatierungsgeräusch verbergen. In YAML ändert das Verschieben eines Schlüssels von unterhalb von services.web zu unterhalb von Diensten seine übergeordnete Zuordnung, obwohl die Zeichen jeder Zeile identisch sind, nachdem Leerzeichen entfernt wurden. Führen Sie die Option für beide Snippets aus: Die Python-Ansicht kann möglicherweise einfacher überprüft werden, während die YAML-Änderung trotz Änderung des Datenbaums verschwinden kann. Verwenden Sie niemals die Leerzeichen-unempfindliche Ausgabe allein, um einrückungsempfindliche Formate zu genehmigen.
Wenn Leerzeichen Daten sind – listet Formate auf, in denen Leerzeichen eine Bedeutung haben: YAML, Makefiles, Markdown-Codeblöcke, Exporte mit fester Breite und Zeichenfolgenliterale
Leerzeichen sind Daten in YAML-Einrückungen, Makefile-Rezepten, Markdown-Codeblöcken und Exporten mit fester Breite. Innerhalb von Zeichenfolgenliteralen kann das Ersetzen mehrerer Leerzeichen den für den Benutzer sichtbaren Text oder einen signierten oder gehashten Wert ändern. Sogar Code mit allgemein flexibler Formatierung weist Kontexte auf, in denen Leerzeichen von Bedeutung sind: Python-Blöcke und Shell-Hier-Dokumente sind offensichtliche Beispiele. Die Option kann diese Kontexte nicht ableiten, da sie einfache Zeilen sieht, nicht die Sprachgrammatik. Wählen Sie es nur aus, wenn Sie die zu vergleichende Datei verstehen.
Durch die Kombination der Leerzeichen- und Groß-/Kleinschreibungsoptionen wird beschrieben, wie die Aktivierung beider Optionen den Vergleich auf dieselben Buchstaben in derselben Reihenfolge einschränkt und was dadurch verborgen bleibt
Durch die Kombination von „Leerzeichen ignorieren“ und „Groß-/Kleinschreibung ignorieren“ wird die Übereinstimmung auf Zeilen eingeschränkt, deren verbleibende Buchstaben und Satzzeichen unabhängig von Groß- und Kleinschreibung oder Abständen übereinstimmen. Das macht ein formatierungsintensives Dokument zwar ruhig, kann aber auch eine geänderte Groß-/Kleinschreibung, einen Header-Schlüssel oder einen geänderten Dateisystempfad verbergen. ToolAcre schreibt den Vergleichsschlüssel nur dann in Kleinbuchstaben, wenn Sie diese zweite Option aktivieren. Es wird weiterhin der ursprüngliche Zeilentext angezeigt. Wechseln Sie die Optionen einzeln, damit Sie sehen können, welche Änderung jeweils entfernt wurde.
Was dies nicht abdeckt: Die Option vergleicht Linien nach der Normalisierung. Absätze werden nicht umgebrochen, verschobene Blöcke werden nicht erkannt und Formatierungen in Rich-Dokumenten werden nicht verglichen
Die Funktion führt keinen Umbruch von Absätzen durch, erkennt keine verschobenen Blöcke, vergleicht die HTML-Wiedergabe nicht und entscheidet nicht, ob zwei Programm-ASTs gleichwertig sind. Der Diff von ToolAcre ist eine zeilenbasierte dynamische LCS-Programmierung mit Common-Prefix/Suffix-Trimmung, nicht der Myers-Algorithmus, der in einigen allgemeinen Diff-Tutorials beschrieben wird. Bei großen eingefügten Dateien wird der Vorgang gestoppt, anstatt eine unbegrenzte Matrix zuzuweisen. Verwenden Sie einen sprachbewussten Parser oder eine Versionskontrollprüfung für strukturelle Ansprüche.
Fazit: Schalten Sie es um, nicht standardmäßig verwenden – empfiehlt die Durchführung beider Vergleiche und zeigt, wie Sie mit dem Textvergleich von ToolAcre die Leerraumoption für dasselbe Textpaar ein- und ausschalten können
Schalten Sie „Leerzeichen ignorieren“ als Ansicht und nicht als Standardwahrheit ein. Beim Textvergleich bleibt alles, was Sie im Browser einfügen, erhalten, sodass Sie beide Ansichten derselben Revisionen vergleichen können, ohne eine Vertrags- oder Konfigurationsdatei hochladen zu müssen. Wenn eine Änderung in der normalisierten Ansicht verschwindet, fragen Sie, ob das zugrunde liegende Format Leerzeichen eine Bedeutung gibt, bevor Sie entscheiden, dass sie harmlos war.