Je recherche une application qui puisse comparer deux sources C ++ et trouver les différences significatives du code (pour comparer des versions qui ont pu être reformatées différemment). Au minimum, quelque chose qui a la capacité d'ignorer les changements dans les espaces blancs, les espaces de tabulation et les sauts de ligne qui n'affectent pas la fonctionnalité de la source (notez que si un saut de ligne est considéré comme un espace blanc dépend du langage , et C et C ++ le font ). Et, idéalement, quelque chose qui peut identifier exactement toutes les différences significatives du code. Je suis sous Ubuntu.
Selon diff --help | grep ignore
, je m'attendais diff -bBwZ
à faire raisonnablement le travail (je m'attendais à obtenir des faux négatifs, pour être traités plus tard). Néanmoins, ce n'est pas le cas.
si j'ai les fichiers suivants avec des extraits
test_diff1.txt
else if (prop == "P1") { return 0; }
et test_diff2.txt
else if (prop == "P1") {
return 0;
}
puis
$ diff -bBwZ test_diff1.txt test_diff2.txt
1c1,3
< else if (prop == "P1") { return 0; }
---
> else if (prop == "P1") {
> return 0;
> }
au lieu de résultats vides.
L'utilisation d'un formateur de code comme "filtre" sur les deux entrées peut filtrer ces différences, mais la sortie résultante devrait alors être liée aux entrées d'origine pour le rapport final des différences afin de conserver le texte et les numéros de ligne réels. Donc l'objectif est réalisable sans avoir besoin d'un compilateur correctement ... Je ne sais pas si quelque chose est disponible, cependant.
Peut-on atteindre l'objectif diff
?
Sinon, existe-t-il une alternative (de préférence, pour la ligne de commande)?
la source
Dans une situation similaire, lorsque j'ai eu besoin de comparer deux
git
branches de manière agnostique au formatage de code, j'ai fait ceci:créé des succursales temporaires:
formaté les deux branches en utilisant
clang-format
:a fait une comparaison réelle:
(
-w -b
vous permet d'ignorer la différence d'espace, juste au cas où).Vous préférerez peut-être
uncrustify
plus declang-format
(celuiuncrustify
-cimod_full_brace_if
peut être utilisé pour forcer l'insertion / suppression des accolades autour du corps d'une seule ligneif
).De plus, si GNU
parallel
n'est pas installé, utilisezxargs
- il fait de même, mais un peu plus longtemps.la source