Sto lavorando a un progetto C++ in cui sto usando molto #pragma omp
. Uso il meraviglioso formato clang per la pulizia ma elimina sempre il rientro per tutte le direttive del preprocessore. C'è un modo per cambiare questo comportamento? O c'è un altro strumento di formattazione che è più raccomandabile? O dovrei evitare di usare questi strumenti?Rientro delle direttive del preprocessore con clang-format
risposta
Si consiglia di eseguire una patch solo da soli e di effettuare una richiesta di pull.
Non è poi così difficile, ho fatto una richiesta di prelievo altrettanto banale una volta. Il codice in formato clang è abbastanza ordinato. Clang-format gestisce già i commenti di codice nel modo desiderato, allineandoli al codice circostante (almeno ha un'opzione per abilitarlo), quindi fare una patch per trattare certe direttive PP allo stesso modo dovrebbe essere semplice.
In alternativa, puoi semplicemente scrivere la patch da te e compilare clang yourself dalla sorgente con l'opzione extra, da utilizzare nel tuo progetto. L'ho fatto anche io prima di decidere di inviare loro la patch.
Mi ci sono volute solo poche ore per capire come fare questo, il loro codice è molto più pulito rispetto al codice di molti altri progetti open source del.
Lo esaminerò e se non è davvero così difficile lo farò. Ma adesso sto affogando nel lavoro, quindi forse in 2 o 3 mesi ... – dawirstejeck
hai fatto dei progressi su questo? :-) caratteristica molto apprezzata! – Gabriel
È tardi, ma questa è la soluzione che stai cercando. Formatta il pragma insieme al blocco di codice. È possibile utilizzarlo prima che sostengano definitivamente il rientro del pragma.
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
Buona risposta, purché il codice non contenga #pragmas già commentati che vengono riattivati da questo. Se il tuo codice li ha, '#pragma omp' può essere sostituito da qualcosa come' // AWRBHAWRBWAQ' invece. Praticamente qualsiasi commento farà finché non è già presente nel codice sorgente. – hvd
A partire dalla versione 6.0, l'opzione IndentPPDirectives
può essere utilizzato. L'utilizzo è descritto in this review.
Utilizzando IndentPPDirectives: None
risultati in:
#if FOO
#if BAR
#include <foo>
#endif
#endif
Mentre IndentPPDirectives: None
dà:
#if FOO
# if BAR
# include <foo>
# endif
#endif
- 1. Informazioni sulle direttive del preprocessore
- 2. Perché uno dovrebbe preoccuparsi delle direttive del preprocessore?
- 3. Le indentazioni delle direttive preprocessore sono sensibili in F #?
- 4. #if direttiva del preprocessore per le direttive diverse da DEBUG
- 5. Differenza tra le direttive del preprocessore #if e #ifdef
- 6. MinGW non definisce WIN32, errore nelle direttive del preprocessore
- 7. Utilizzando preprocessore direttive in Visual Studio 2010 con C#
- 8. ClangFormat style per ReactiveCocoa
- 9. Direttive di annidamento all'interno delle direttive
- 10. Utilizzo delle definizioni del preprocessore in App.lista iOS.plist
- 11. Direttrice del preprocessore supportata dal compilatore RIM
- 12. js-beautify rientro delle etichette delle maiuscole
- 13. Elenco di tutte le direttive del preprocessore Objective-C in Clang
- 14. Vantaggi del condizionale-preprocessore oltre istruzioni condizionali
- 15. Rientro delle barre dei commenti di riga
- 16. Rientro del rientranza
- 17. C Definizione del test del preprocessore di più macro
- 18. Come richiedere il rientro delle tabulazioni con CheckStyle?
- 19. Notepad ++ Curly Bracket Auto-rientro negativo delle
- 20. dilemma del preprocessore Javascript-friendly
- 21. (Strambo?) Comportamento del preprocessore GCC
- 22. C preprocessore con if
- 23. Includere libreria statica all'interno di una direttiva del preprocessore
- 24. Definizione del preprocessore in Typescript
- 25. Qual è la precedenza degli operatori nelle direttive per il preprocessore C#?
- 26. impostazione ng-htmljs preprocessore preprocessore karma
- 27. Direttive personalizzate ricorsive con ngRepeat
- 28. Cosa fa il preprocessore con "# <number><filename>"?
- 29. Qual è lo scopo delle direttive #line di perl?
- 30. Angular - Direttive e utilizzo del modulo
Storicamente, le direttive del preprocessore * dovuto * per iniziare alla prima colonna, ed è ancora consuetudine per molti a porre almeno il principale indicatore di direzione '#' nella prima colonna della linea. –
Capisco ... ma vedi il mio punto, vero? Poiché "#pragma omp" è applicato ai blocchi (che sono rientrati) è molto più piacevole vedere specialmente queste direttive rientrate ... – dawirstejeck
Ho lo stesso problema. Tutto quello che riuscivo a trovare era un [bug report] aperto (https://llvm.org/bugs/show_bug.cgi?id=17362). Spero che lo implementeranno presto. – mnme