Ich suche nach einer Anwendung, die zwei C ++ - Quellen vergleichen und die codebedeutenden Unterschiede finden kann (um Versionen zu vergleichen, die möglicherweise anders formatiert wurden). Zumindest etwas, das Änderungen in Leerzeichen, Tabulatoren und Zeilenumbrüchen ignorieren kann, die die Funktionalität der Quelle nicht beeinträchtigen (beachten Sie, dass es sprachabhängig ist, ob ein Zeilenumbruch als Leerzeichen betrachtet wird , und C und C ++ dies tun ). Und im Idealfall etwas, das genau alle codebedeutenden Unterschiede identifizieren kann. Ich bin unter Ubuntu.
Wie pro diff --help | grep ignore
erwartete ich diff -bBwZ
tun vernünftigerweise den Job (ich erwartet hatte einige falsche Negative zu bekommen, um später behandelt werden). Trotzdem nicht.
wenn ich die folgenden Dateien mit Schnipsel habe
test_diff1.txt
else if (prop == "P1") { return 0; }
und test_diff2.txt
else if (prop == "P1") {
return 0;
}
dann
$ diff -bBwZ test_diff1.txt test_diff2.txt
1c1,3
< else if (prop == "P1") { return 0; }
---
> else if (prop == "P1") {
> return 0;
> }
statt leerer Ergebnisse.
Die Verwendung eines Code-Formatierers als "Filter" für beide Eingaben kann diese Unterschiede herausfiltern, aber dann müsste die resultierende Ausgabe für die endgültige Meldung von Unterschieden an die ursprünglichen Eingaben gebunden werden, um die tatsächlichen Text- und Zeilennummern beizubehalten. Das Ziel ist also erreichbar, ohne dass ein Compiler richtig benötigt wird ... Ich weiß jedoch nicht, ob etwas verfügbar ist.
Kann das Ziel erreicht werden diff
?
Gibt es sonst eine Alternative (vorzugsweise für die Kommandozeile)?
quelle
In einer ähnlichen Situation habe ich Folgendes
git
getan , als ich zwei Zweige unabhängig voneinander auf Code-Formatierung vergleichen musste:temporäre Zweige erstellt:
formatierte beide Zweige mit
clang-format
:tat tatsächlichen Vergleich:
(
-w -b
Ermöglicht es Ihnen, Platzunterschiede für alle Fälle zu ignorieren).Sie können es vorziehen ,
uncrustify
überclang-format
(uncrustify
‚smod_full_brace_if
verwendet werden kann , Einfügen / Entfernen von geschweiften Klammern um einzeiligen zu erzwingenif
‘ s Körper).Wenn GNU
parallel
nicht installiert ist, verwenden Siexargs
- es funktioniert genauso, jedoch etwas länger.quelle