Szukam aplikacji, która może porównać dwa źródła C ++ i znaleźć różnice znaczące dla kodu (aby porównać wersje, które mogły zostać sformatowane inaczej). Co najmniej coś, co może ignorować zmiany białych znaków, tabulatorów i znaków nowej linii, które nie wpływają na funkcjonalność źródła (zauważ, że to, czy nowa linia jest uważana za białe znaki, zależy od języka , a C i C ++ robią to ). I idealnie coś, co może dokładnie zidentyfikować wszystkie różnice znaczące dla kodu. Jestem pod Ubuntu.
Zgodnie z diff --help | grep ignore
oczekiwaniami, spodziewałem diff -bBwZ
się wykonać rozsądnie robotę (spodziewałem się fałszywych negatywów, które zostaną rozwiązane później). Niemniej jednak nie.
jeśli mam następujące pliki z fragmentami
test_diff1.txt
else if (prop == "P1") { return 0; }
i test_diff2.txt
else if (prop == "P1") {
return 0;
}
następnie
$ diff -bBwZ test_diff1.txt test_diff2.txt
1c1,3
< else if (prop == "P1") { return 0; }
---
> else if (prop == "P1") {
> return 0;
> }
zamiast pustych wyników.
Użycie formatera kodu jako „filtra” na obu wejściach może odfiltrować te różnice, ale wówczas wynikowy wynik musiałby zostać powiązany z oryginalnymi danymi wejściowymi w celu końcowego raportowania różnic, aby zachować rzeczywisty tekst i numery wierszy. Cel jest więc możliwy do osiągnięcia bez kompilatora poprawnie ... Nie wiem jednak, czy coś jest dostępne.
Czy można osiągnąć cel diff
?
W przeciwnym razie, czy istnieje alternatywa (najlepiej dla wiersza poleceń)?
źródło
W podobnej sytuacji, gdy musiałem porównać dwie
git
gałęzie w sposób agnostyczny formatujący kod, zrobiłem to:utworzono oddziały tymczasowe:
sformatował obie gałęzie za pomocą
clang-format
:dokonał faktycznego porównania:
(
-w -b
pozwala na wszelki wypadek zignorować różnicę miejsca).Może wolisz
uncrustify
powyżejclang-format
(uncrustify
„smod_full_brace_if
może być używany w celu wymuszenia wstawiania / usuwanie nawiasów klamrowych wokół pojedynczej liniiif
” s ciała).Ponadto, jeśli GNU
parallel
nie jest zainstalowane, użyjxargs
- robi to samo, ale trochę dłużej.źródło