2015-07-11 13 views
11

Sto usando vim-autoformat, che utilizza clang-format come formattatore esterno.Come potrei indentare il pragma C++ usando il formato clang?

Sembra che lo clang-format non indentifichi il C++ #pragma. Per esempio:

#include <omp.h> 
#include <cstdio> 
int main() 
{ 
#pragma omp parallel for 
    for (int i = 0; i < 10; ++i) 
    { 
     puts("demo"); 
    } 
    return 0; 
} 

mi piacerebbe averlo formattato in:

#include <omp.h> 
#include <cstdio> 
int main() 
{ 
    #pragma omp parallel for 
    for (int i = 0; i < 10; ++i) 
    { 
     puts("demo"); 
    } 
    return 0; 
} 

ho controllato clangformat, ma non ha trovato quale opzione ho potuto utilizzare.

+0

Forse perché le direttive del preprocessore tradizionale * dovevano * iniziare sulla prima colonna della riga? –

+0

[Rapporto bug pertinente] (https://llvm.org/bugs/show_bug.cgi?id=17362). – rettichschnidi

risposta

1

È tardi, ma questa è la soluzione che stai cercando. Formatta il pragma insieme al blocco di codice.

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

Il concetto principale sostituisce la stringa in modo che il formattatore utilizza le regole "corretta" a questi pragma. L'esempio motivativo è il seguente.

# 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 
+0

Grazie per la risposta. Si prega di includere le parti rilevanti del codice nella risposta. – perigon

Problemi correlati