c++ clang clang-format

c++ - ¿Cómo llamar a formato clang sobre una carpeta de proyecto cpp?



clang-format (6)

Desafortunadamente, no hay forma de aplicar el formato clang recursivamente. *.cpp solo coincidirá con los archivos del directorio actual, no con los subdirectorios. Incluso **/* no funciona.

Afortunadamente, hay una solución: tomar todos los nombres de archivo con el comando find y canalizarlos. Por ejemplo, si desea formatear todos los archivos .h y .cpp en el directorio foo/bar/ recursivamente, puede hacerlo

find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i

Ver here para una discusión adicional.

¿Hay alguna manera de llamar a algo así como clang-format --style=Webkit para una carpeta de proyecto cpp completa, en lugar de ejecutarlo por separado para cada archivo?

Estoy usando clang-format.py y vim para hacer esto, pero supongo que hay una manera de aplicar esto una vez.


Estoy usando el siguiente comando para formatear todos los archivos de Objective-C en la carpeta actual de forma recursiva :

$ find . -name "*.m" -o -name "*.h" | sed ''s| |// |g'' | xargs clang-format -i

He definido el siguiente alias en mi .bash_profile para 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"


Para los usuarios de Windows: si tiene soporte para Powershell 3.0, puede hacer:

Get-ChildItem -Path . -Directory -Recurse | foreach { cd $_.FullName &clang-format -i -style=WebKit *.cpp }

Nota 1: use pushd . y popd si desea tener el mismo directorio actual antes y después del script

Nota 2: el script funciona en el directorio de trabajo actual

Nota 3: Esto probablemente se puede escribir en una sola línea si eso fue realmente importante para usted


Primero cree un .clang-format si no existe:

clang-format -style=WebKit -dump-config > .clang-format

Elija el estilo predefinido que desee o edite el .clang-format resultante .clang-format .

Entonces corre:

find . -regex ''.*/./(cpp/|hpp/|cc/|cxx/)'' -exec clang-format -style=file -i {} /;

Se pueden usar otras extensiones de archivo que no sean cpp , hpp , cc y cxx en la expresión regular, solo asegúrese de separarlas con /| .


Qué pasa:

clang-format -i -style=WebKit *.cpp *.h

en la carpeta del proyecto. La opción -i lo hace in situ (por defecto, la salida formateada se escribe en stdout).


Recientemente encontré un script bash que hace exactamente lo que necesitas:

https://github.com/eklitzke/clang-format-all

Este es un script bash que ejecutará clang-format -i en su código.

caracteristicas:

  • Encuentra la ruta correcta al clang-format en Ubuntu / Debian, que codifica la versión LLVM en el nombre de archivo en clang-format
  • Corrige archivos de forma recursiva
  • Detecta las extensiones de archivo más comunes utilizadas por los proyectos C / C ++

En Windows, lo usé con éxito en Git Bash y WSL.