Est-il possible d'appeler quelque chose comme clang-format --style=Webkit
pour un dossier de projet cpp complet, plutôt que de l’exécuter séparément pour chaque fichier?
J'utilise clang-format.py
et vim
pour le faire, mais je suppose qu’il ya un moyen de l’appliquer une fois.
Qu'en est-il de:
clang-format -i -style=WebKit *.cpp *.h
dans le dossier du projet. L'option -i le rend in-situ (par défaut, la sortie formatée est écrite sur stdout).
Malheureusement, il n'y a aucun moyen d'appliquer récursivement le format clang. *.cpp
ne fera correspondre que les fichiers du répertoire en cours, pas les sous-répertoires. Même **/*
ne fonctionne pas.
Heureusement, il existe une solution: saisissez tous les noms de fichiers à l'aide de la commande find
et dirigez-les vers l'intérieur. Par exemple, si vous souhaitez formater tous les .h
et .cpp
fichiers dans le répertoire foo/bar/
récursivement, vous pouvez faire
find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i
Voir ici pour une discussion supplémentaire.
Créez d'abord un .clang-format
fichier s'il n'existe pas:
clang-format -style=WebKit -dump-config > .clang-format
Choisissez le style prédéfini que vous préférez ou modifiez le résultat .clang-format
fichier.
Puis lancez:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
D'autres extensions de fichier que cpp
, hpp
, cc
et cxx
peuvent être utilisées dans l'expression régulière. Veillez simplement à les séparer par \|
.
J'ai récemment trouvé un script bash qui fait exactement ce dont vous avez besoin:
https://github.com/eklitzke/clang-format-all
Ceci est un script bash qui exécutera
clang-format -i
sur votre code.Fonctionnalités:
- Trouve le bon chemin pour
clang-format
sur Ubuntu/Debian, qui code la version de LLVM dans le fichierclang-format
nom de fichier- Corrige les fichiers de manière récursive
- Détecte les extensions de fichiers les plus courantes utilisées par les projets C/C++
Sous Windows, je l'ai utilisé avec succès dans Git Bash et WSL.
Pour les utilisateurs Windows: Si vous avez le support de Powershell 3.0, vous pouvez faire:
Get-ChildItem -Path . -Directory -Recurse |
foreach {
cd $_.FullName
&clang-format -i -style=WebKit *.cpp
}
Note1: Utilisez pushd .
et popd
si vous voulez avoir le même répertoire actuel avant et après le script
Note2: Le script fonctionne dans le répertoire de travail actuel
Note3: Ceci peut probablement être écrit en une seule ligne si c'était vraiment important pour vous
J'utilise la commande suivante pour formater tous les fichiers de objective-C dans le dossier actuel récursivement:
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
J'ai défini l'alias suivant dans mon .bash_profile
pour faciliter les choses:
# 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"