1*4882a593Smuzhiyun.. include:: ../disclaimer-ita.rst 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun:Original: :ref:`Documentation/process/clang-format.rst <clangformat>` 4*4882a593Smuzhiyun:Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun.. _it_clangformat: 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunclang-format 9*4882a593Smuzhiyun============ 10*4882a593Smuzhiyun``clang-format`` è uno strumento per formattare codice C/C++/... secondo 11*4882a593Smuzhiyunun gruppo di regole ed euristiche. Come tutti gli strumenti, non è perfetto 12*4882a593Smuzhiyune non copre tutti i singoli casi, ma è abbastanza buono per essere utile. 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun``clang-format`` può essere usato per diversi fini: 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun - Per riformattare rapidamente un blocco di codice secondo lo stile del 17*4882a593Smuzhiyun kernel. Particolarmente utile quando si sposta del codice e lo si 18*4882a593Smuzhiyun allinea/ordina. Vedere it_clangformatreformat_. 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun - Identificare errori di stile, refusi e possibili miglioramenti nei 21*4882a593Smuzhiyun file che mantieni, le modifiche che revisioni, le differenze, 22*4882a593Smuzhiyun eccetera. Vedere it_clangformatreview_. 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun - Ti aiuta a seguire lo stile del codice, particolarmente utile per i 25*4882a593Smuzhiyun nuovi arrivati o per coloro che lavorano allo stesso tempo su diversi 26*4882a593Smuzhiyun progetti con stili di codifica differenti. 27*4882a593Smuzhiyun 28*4882a593SmuzhiyunIl suo file di configurazione è ``.clang-format`` e si trova nella cartella 29*4882a593Smuzhiyunprincipale dei sorgenti del kernel. Le regole scritte in quel file tentano 30*4882a593Smuzhiyundi approssimare le lo stile di codifica del kernel. Si tenta anche di seguire 31*4882a593Smuzhiyunil più possibile 32*4882a593Smuzhiyun:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`. 33*4882a593SmuzhiyunDato che non tutto il kernel segue lo stesso stile, potreste voler aggiustare 34*4882a593Smuzhiyunle regole di base per un particolare sottosistema o cartella. Per farlo, 35*4882a593Smuzhiyunpotete sovrascriverle scrivendole in un altro file ``.clang-format`` in 36*4882a593Smuzhiyununa sottocartella. 37*4882a593Smuzhiyun 38*4882a593SmuzhiyunQuesto strumento è già stato incluso da molto tempo nelle distribuzioni 39*4882a593SmuzhiyunLinux più popolari. Cercate ``clang-format`` nel vostro repositorio. 40*4882a593SmuzhiyunAltrimenti, potete scaricare una versione pre-generata dei binari di LLVM/clang 41*4882a593Smuzhiyunoppure generarlo dai codici sorgenti: 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun http://releases.llvm.org/download.html 44*4882a593Smuzhiyun 45*4882a593SmuzhiyunTroverete più informazioni ai seguenti indirizzi: 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun https://clang.llvm.org/docs/ClangFormat.html 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun https://clang.llvm.org/docs/ClangFormatStyleOptions.html 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun.. _it_clangformatreview: 53*4882a593Smuzhiyun 54*4882a593SmuzhiyunRevisionare lo stile di codifica per file e modifiche 55*4882a593Smuzhiyun----------------------------------------------------- 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunEseguendo questo programma, potrete revisionare un intero sottosistema, 58*4882a593Smuzhiyuncartella o singoli file alla ricerca di errori di stile, refusi o 59*4882a593Smuzhiyunmiglioramenti. 60*4882a593Smuzhiyun 61*4882a593SmuzhiyunPer farlo, potete eseguire qualcosa del genere:: 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun # Make sure your working directory is clean! 64*4882a593Smuzhiyun clang-format -i kernel/*.[ch] 65*4882a593Smuzhiyun 66*4882a593SmuzhiyunE poi date un'occhiata a *git diff*. 67*4882a593Smuzhiyun 68*4882a593SmuzhiyunOsservare le righe di questo diff è utile a migliorare/aggiustare 69*4882a593Smuzhiyunle opzioni di stile nel file di configurazione; così come per verificare 70*4882a593Smuzhiyunle nuove funzionalità/versioni di ``clang-format``. 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun``clang-format`` è in grado di leggere diversi diff unificati, quindi 73*4882a593Smuzhiyunpotrete revisionare facilmente delle modifiche e *git diff*. 74*4882a593SmuzhiyunLa documentazione si trova al seguente indirizzo: 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting 77*4882a593Smuzhiyun 78*4882a593SmuzhiyunPer evitare che ``clang-format`` formatti alcune parti di un file, potete 79*4882a593Smuzhiyunscrivere nel codice:: 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun int formatted_code; 82*4882a593Smuzhiyun // clang-format off 83*4882a593Smuzhiyun void unformatted_code ; 84*4882a593Smuzhiyun // clang-format on 85*4882a593Smuzhiyun void formatted_code_again; 86*4882a593Smuzhiyun 87*4882a593SmuzhiyunNonostante si attraente l'idea di utilizzarlo per mantenere un file 88*4882a593Smuzhiyunsempre in sintonia con ``clang-format``, specialmente per file nuovi o 89*4882a593Smuzhiyunse siete un manutentore, ricordatevi che altre persone potrebbero usare 90*4882a593Smuzhiyununa versione diversa di ``clang-format`` oppure non utilizzarlo del tutto. 91*4882a593SmuzhiyunQuindi, dovreste trattenervi dall'usare questi marcatori nel codice del 92*4882a593Smuzhiyunkernel; almeno finché non vediamo che ``clang-format`` è diventato largamente 93*4882a593Smuzhiyunutilizzato. 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun.. _it_clangformatreformat: 97*4882a593Smuzhiyun 98*4882a593SmuzhiyunRiformattare blocchi di codice 99*4882a593Smuzhiyun------------------------------ 100*4882a593Smuzhiyun 101*4882a593SmuzhiyunUtilizzando dei plugin per il vostro editor, potete riformattare una 102*4882a593Smuzhiyunblocco (selezione) di codice con una singola combinazione di tasti. 103*4882a593SmuzhiyunQuesto è particolarmente utile: quando si riorganizza il codice, per codice 104*4882a593Smuzhiyuncomplesso, macro multi-riga (e allineare le loro "barre"), eccetera. 105*4882a593Smuzhiyun 106*4882a593SmuzhiyunRicordatevi che potete sempre aggiustare le modifiche in quei casi dove 107*4882a593Smuzhiyunquesto strumento non ha fatto un buon lavoro. Ma come prima approssimazione, 108*4882a593Smuzhiyunpuò essere davvero molto utile. 109*4882a593Smuzhiyun 110*4882a593SmuzhiyunQuesto programma si integra con molti dei più popolari editor. Alcuni di 111*4882a593Smuzhiyunessi come vim, emacs, BBEdit, Visaul Studio, lo supportano direttamente. 112*4882a593SmuzhiyunAl seguente indirizzo troverete le istruzioni: 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun https://clang.llvm.org/docs/ClangFormat.html 115*4882a593Smuzhiyun 116*4882a593SmuzhiyunPer Atom, Eclipse, Sublime Text, Visual Studio Code, XCode e altri editor 117*4882a593Smuzhiyune IDEs dovreste essere in grado di trovare dei plugin pronti all'uso. 118*4882a593Smuzhiyun 119*4882a593SmuzhiyunPer questo caso d'uso, considerate l'uso di un secondo ``.clang-format`` 120*4882a593Smuzhiyunche potete personalizzare con le vostre opzioni. 121*4882a593SmuzhiyunConsultare it_clangformatextra_. 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun.. _it_clangformatmissing: 125*4882a593Smuzhiyun 126*4882a593SmuzhiyunCose non supportate 127*4882a593Smuzhiyun------------------- 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun``clang-format`` non ha il supporto per alcune cose che sono comuni nel 130*4882a593Smuzhiyuncodice del kernel. Sono facili da ricordare; quindi, se lo usate 131*4882a593Smuzhiyunregolarmente, imparerete rapidamente a evitare/ignorare certi problemi. 132*4882a593Smuzhiyun 133*4882a593SmuzhiyunIn particolare, quelli più comuni che noterete sono: 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun - Allineamento di ``#define`` su una singola riga, per esempio:: 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun #define TRACING_MAP_BITS_DEFAULT 11 138*4882a593Smuzhiyun #define TRACING_MAP_BITS_MAX 17 139*4882a593Smuzhiyun #define TRACING_MAP_BITS_MIN 7 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun contro:: 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun #define TRACING_MAP_BITS_DEFAULT 11 144*4882a593Smuzhiyun #define TRACING_MAP_BITS_MAX 17 145*4882a593Smuzhiyun #define TRACING_MAP_BITS_MIN 7 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun - Allineamento dei valori iniziali, per esempio:: 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun static const struct file_operations uprobe_events_ops = { 150*4882a593Smuzhiyun .owner = THIS_MODULE, 151*4882a593Smuzhiyun .open = probes_open, 152*4882a593Smuzhiyun .read = seq_read, 153*4882a593Smuzhiyun .llseek = seq_lseek, 154*4882a593Smuzhiyun .release = seq_release, 155*4882a593Smuzhiyun .write = probes_write, 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun contro:: 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun static const struct file_operations uprobe_events_ops = { 161*4882a593Smuzhiyun .owner = THIS_MODULE, 162*4882a593Smuzhiyun .open = probes_open, 163*4882a593Smuzhiyun .read = seq_read, 164*4882a593Smuzhiyun .llseek = seq_lseek, 165*4882a593Smuzhiyun .release = seq_release, 166*4882a593Smuzhiyun .write = probes_write, 167*4882a593Smuzhiyun }; 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun.. _it_clangformatextra: 171*4882a593Smuzhiyun 172*4882a593SmuzhiyunFunzionalità e opzioni aggiuntive 173*4882a593Smuzhiyun--------------------------------- 174*4882a593Smuzhiyun 175*4882a593SmuzhiyunAl fine di minimizzare le differenze fra il codice attuale e l'output 176*4882a593Smuzhiyundel programma, alcune opzioni di stile e funzionalità non sono abilitate 177*4882a593Smuzhiyunnella configurazione base. In altre parole, lo scopo è di rendere le 178*4882a593Smuzhiyundifferenze le più piccole possibili, permettendo la semplificazione 179*4882a593Smuzhiyundella revisione di file, differenze e modifiche. 180*4882a593Smuzhiyun 181*4882a593SmuzhiyunIn altri casi (per esempio un particolare sottosistema/cartella/file), lo 182*4882a593Smuzhiyunstile del kernel potrebbe essere diverso e abilitare alcune di queste 183*4882a593Smuzhiyunopzioni potrebbe dare risultati migliori. 184*4882a593Smuzhiyun 185*4882a593SmuzhiyunPer esempio: 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun - Allineare assegnamenti (``AlignConsecutiveAssignments``). 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun - Allineare dichiarazioni (``AlignConsecutiveDeclarations``). 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun - Riorganizzare il testo nei commenti (``ReflowComments``). 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun - Ordinare gli ``#include`` (``SortIncludes``). 194*4882a593Smuzhiyun 195*4882a593SmuzhiyunPiuttosto che per interi file, solitamente sono utili per la riformattazione 196*4882a593Smuzhiyundi singoli blocchi. In alternativa, potete creare un altro file 197*4882a593Smuzhiyun``.clang-format`` da utilizzare con il vostro editor/IDE. 198