¿Hay alguna manera de llamar a algo como clang-format --style=Webkitpara una carpeta de proyecto cpp completa, en lugar de ejecutarlo por separado para cada archivo?
Estoy usando clang-format.pyy vimpara hacer esto, pero supongo que hay una manera de aplicar esto una vez.
c++
clang
clang-format
usuario3639557
fuente
fuente

clang-format-3.6 -i -style=file *.cpp *.h *.hpp**construcción.clang-tidy?*.cpppara generar una lista de archivos debería funcionar. Elclang-tidycomando permite pasar varios archivos. `USO: clang-tidy [opciones] <source0> [... <sourceN>]` Sin embargo, en la práctica puede que no sea la mejor manera. Clang-tidy realiza un análisis mucho más profundo, por lo que requiere las banderas del compilador para cada archivo, etc. Cuando usé clang-tidy, usualmente tenía una "base de datos de compilación": un archivo JSON con los comandos para cada archivo y algún script que fue encima de eso. Fue hace un par de años, tal vez ahora haya una mejor manera.Desafortunadamente, no hay forma de aplicar el formato clang de forma recursiva.
*.cppsolo coincidirá con los archivos del directorio actual, no con los subdirectorios. Incluso**/*no funciona.Afortunadamente, hay una solución: tome todos los nombres de archivo con el
findcomando y canalícelos. Por ejemplo, si desea formatear todos los archivos.hy.cppen el directorio de formafoo/bar/recursiva, puede hacerloVea aquí para una discusión adicional.
fuente
**/*.cppparece funcionar en bash (razonablemente moderno). Es posible que lo necesiteshopt -s globstarantes.GLOB_RECURSEpara encontrar todos los.cpparchivos y pasarlos aclang-format.findyxargsdebe usarfind ... -print0yxargs -0 ...para garantizar que todos los tipos de nombres de archivo se manejen correctamente.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -isolucionará el problema.Primero cree un
.clang-formatarchivo si no existe:Elija el estilo predefinido que desee o edite el
.clang-formatarchivo resultante .El configurador de formato clang es útil.
Entonces corre:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;Otras extensiones de archivo que
cpp,hpp,ccycxxpueden ser utilizados en la expresión regular, sólo asegúrese de separarlos con\|.fuente
-style=filehay una manera para especificar una ruta de archivo personalizado? Lo intenté-style=~/.clang-formaty no funciona.cp ~/.clang-format .luego el comando de búsqueda en su respuesta.Recientemente encontré un script bash que hace exactamente lo que necesitas:
https://github.com/eklitzke/clang-format-all
En Windows, lo usé con éxito en Git Bash y WSL.
fuente
Para los usuarios de Windows: si tiene soporte para Powershell 3.0, puede hacer:
Note1: Use
pushd .ypopdsi desea tener el mismo directorio actual antes y después del scriptNota 2: el script opera en el directorio de trabajo actual
Nota 3: esto probablemente se pueda escribir en una sola línea si eso fue realmente importante para usted
fuente
Estoy usando el siguiente comando para formatear todos los archivos de objetivo-C en la carpeta actual de forma recursiva :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -iHe definido el siguiente alias en mi
.bash_profilepara facilitar las cosas:# 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"fuente
Aquí hay una solución que busca de forma recursiva y canaliza todos los archivos al formato clang como una lista de archivos en un solo comando. También excluye el directorio "build" (yo uso CMake), pero puede omitir el paso "grep" para eliminarlo.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -ifuente