Czy istnieje sposób na wywołanie czegoś podobnego clang-format --style=Webkit
do całego folderu projektu CPP, zamiast uruchamiania go osobno dla każdego pliku?
Używam clang-format.py
i vim
robię to, ale zakładam, że istnieje sposób na zastosowanie tego raz.
c++
clang
clang-format
user3639557
źródło
źródło
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
konstrukcji.clang-tidy
?*.cpp
do wygenerowania listy plików powinno działać.clang-tidy
Komenda umożliwia przepuszczenie wielu plików. `UŻYCIE: clang-tidy [opcje] <source0> [... <sourceN>]` Jednak w praktyce może to nie być najlepszy sposób. Clang-tidy wykonuje znacznie głębszą analizę, więc wymaga flag kompilatora dla każdego pliku itp. Kiedy używałem clang-tidy, zwykle miałem "bazę danych kompilacji" - plik JSON z poleceniami dla każdego pliku i skryptem ponad tym. To było kilka lat temu, może teraz jest lepszy sposób.Niestety, nie ma sposobu na rekurencyjne zastosowanie formatu clang.
*.cpp
dopasuje tylko pliki w bieżącym katalogu, a nie podkatalogi. Nawet**/*
nie działa.Na szczęście jest rozwiązanie: pobierz wszystkie nazwy plików za pomocą
find
polecenia i potokuj je. Na przykład, jeśli chcesz rekurencyjnie sformatować wszystkie pliki.h
i.cpp
pliki w katalogufoo/bar/
, możesz to zrobićZobacz tutaj, aby uzyskać dodatkową dyskusję.
źródło
**/*.cpp
Wydaje się , że działa w (dość nowoczesnym) bash. Być może będziesz musiałshopt -s globstar
wcześniej.GLOB_RECURSE
do znajdowania wszystkich.cpp
plików i przekazywania ich doclang-format
.find
ixargs
powinno używaćfind ... -print0
i,xargs -0 ...
aby upewnić się, że wszystkie typy nazw plików są obsługiwane poprawnie.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
rozwiąże problem.Najpierw utwórz
.clang-format
plik, jeśli nie istnieje:Wybierz dowolny predefiniowany styl, który lubisz, lub edytuj wynikowy
.clang-format
plik.pomocny jest konfigurator formatu clang .
Następnie uruchomić:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
Pozostałe rozszerzenia plików niż
cpp
,hpp
,cc
icxx
mogą być stosowane w wyrażeniu regularnym, tylko upewnij się, aby oddzielić je\|
.źródło
-style=file
istnieje sposób na określenie niestandardowej ścieżki do pliku? Próbowałem-style=~/.clang-format
i to nie działa.cp ~/.clang-format .
polecenie znajdź w twojej odpowiedzi.Niedawno znalazłem skrypt basha, który robi dokładnie to, czego potrzebujesz:
https://github.com/eklitzke/clang-format-all
W systemie Windows z powodzeniem używałem go w Git Bash i WSL.
źródło
Dla użytkowników systemu Windows: Jeśli masz obsługę Powershell 3.0, możesz:
Uwaga 1: Użyj
pushd .
i,popd
jeśli chcesz mieć ten sam katalog bieżący przed i po skrypcieUwaga 2: skrypt działa w bieżącym katalogu roboczym
Uwaga 3: Prawdopodobnie można to zapisać w jednej linii, jeśli było to dla Ciebie naprawdę ważne
źródło
Używam następującego polecenia, aby rekurencyjnie formatować wszystkie pliki celu-C w bieżącym folderze :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
.bash_profile
Dla ułatwienia zdefiniowałem następujący alias w moim :# Format objC files (*.h and *.m) under the current folder, recursively alias clang-format-all="find . -name \"*.m\" -o -name \"*.h\" | sed 's| |\\ |g' | xargs clang-format -i"
źródło
Oto rozwiązanie, które wyszukuje rekurencyjnie i przekierowuje wszystkie pliki do formatu clang jako listę plików w jednym poleceniu. Wyklucza również katalog „build” (ja używam CMake), ale możesz po prostu pominąć krok „grep”, aby go usunąć.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
źródło
We współczesnym bashu możesz rekurencyjnie indeksować drzewo plików
for file_name in ./src/**/*.{cpp,h,hpp}; do if [ -f "$file_name" ]; then printf '%s\n' "$file_name" clang-format -i $file_name fi done
W tym przypadku zakłada się, że źródło znajduje się w
./src
i.clang-format
zawiera informacje o formatowaniu.źródło