Sangrado de directivas de preprocesador con formato clang

 C Programming >> Programación C >  >> Tags >> Clang
Sangrado de directivas de preprocesador con formato clang

A partir de la versión 6.0, la opción IndentPPDirectives puede ser usado. El uso se describe en esta reseña.

Usando IndentPPDirectives: None da como resultado:

#if FOO
#if BAR
#include <foo>
#endif
#endif

Mientras que IndentPPDirectives: AfterHash da:

#if FOO
#  if BAR
#    include <foo>
#  endif
#endif

Editar:vea la respuesta de @Gabriel Staples para obtener detalles sobre el BeforeHash opción introducida en clang-format versión 9.


Es posible que desee parchearlo usted mismo y hacer una solicitud de extracción.

No es tan difícil, hice una solicitud de extracción similarmente mundana una vez. El código de formato clang es bastante ordenado. Clang-format ya maneja los comentarios de código de la manera que desea, alineándolos con el código circundante (al menos tiene una opción para habilitar esto), por lo que hacer un parche para tratar ciertas directivas PP de la misma manera debería ser sencillo.

Alternativamente, puede escribir el parche usted mismo y compilarlo desde la fuente con la opción adicional, para usar en su proyecto. También hice esto antes de decidir enviarles el parche.

En serio, solo me tomó unas pocas horas descubrir cómo hacer esto, su código es mucho más limpio que el código de muchos otros proyectos de código abierto.


Ha sido tarde, pero esta es la solución que está buscando. Formatea el pragma junto con el bloque de código. Puede usar esto antes de que finalmente admitan la sangría pragma.

https://github.com/MedicineYeh/p-clang-format

El concepto principal es reemplazar la cadena para que el formateador use las reglas "correctas" en estos pragmas. El ejemplo motivador es el siguiente.

# Replace "#pragma omp" by "//#pragma omp"
sed -i 's/#pragma omp/\/\/#pragma omp/g' ./main.c
# Do format
clang-format ./main.c
# Replace "// *#pragma omp" by "#pragma omp"
sed -i 's/\/\/ *#pragma omp/#pragma omp/g' ./main.c