18c2ecf20Sopenharmony_ci.. include:: ../disclaimer-ita.rst 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci:Original: :ref:`Documentation/process/clang-format.rst <clangformat>` 48c2ecf20Sopenharmony_ci:Translator: Federico Vaga <federico.vaga@vaga.pv.it> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci.. _it_clangformat: 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ciclang-format 98c2ecf20Sopenharmony_ci============ 108c2ecf20Sopenharmony_ci``clang-format`` è uno strumento per formattare codice C/C++/... secondo 118c2ecf20Sopenharmony_ciun gruppo di regole ed euristiche. Come tutti gli strumenti, non è perfetto 128c2ecf20Sopenharmony_cie non copre tutti i singoli casi, ma è abbastanza buono per essere utile. 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci``clang-format`` può essere usato per diversi fini: 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci - Per riformattare rapidamente un blocco di codice secondo lo stile del 178c2ecf20Sopenharmony_ci kernel. Particolarmente utile quando si sposta del codice e lo si 188c2ecf20Sopenharmony_ci allinea/ordina. Vedere it_clangformatreformat_. 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci - Identificare errori di stile, refusi e possibili miglioramenti nei 218c2ecf20Sopenharmony_ci file che mantieni, le modifiche che revisioni, le differenze, 228c2ecf20Sopenharmony_ci eccetera. Vedere it_clangformatreview_. 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci - Ti aiuta a seguire lo stile del codice, particolarmente utile per i 258c2ecf20Sopenharmony_ci nuovi arrivati o per coloro che lavorano allo stesso tempo su diversi 268c2ecf20Sopenharmony_ci progetti con stili di codifica differenti. 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ciIl suo file di configurazione è ``.clang-format`` e si trova nella cartella 298c2ecf20Sopenharmony_ciprincipale dei sorgenti del kernel. Le regole scritte in quel file tentano 308c2ecf20Sopenharmony_cidi approssimare le lo stile di codifica del kernel. Si tenta anche di seguire 318c2ecf20Sopenharmony_ciil più possibile 328c2ecf20Sopenharmony_ci:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`. 338c2ecf20Sopenharmony_ciDato che non tutto il kernel segue lo stesso stile, potreste voler aggiustare 348c2ecf20Sopenharmony_cile regole di base per un particolare sottosistema o cartella. Per farlo, 358c2ecf20Sopenharmony_cipotete sovrascriverle scrivendole in un altro file ``.clang-format`` in 368c2ecf20Sopenharmony_ciuna sottocartella. 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ciQuesto strumento è già stato incluso da molto tempo nelle distribuzioni 398c2ecf20Sopenharmony_ciLinux più popolari. Cercate ``clang-format`` nel vostro repositorio. 408c2ecf20Sopenharmony_ciAltrimenti, potete scaricare una versione pre-generata dei binari di LLVM/clang 418c2ecf20Sopenharmony_cioppure generarlo dai codici sorgenti: 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci http://releases.llvm.org/download.html 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ciTroverete più informazioni ai seguenti indirizzi: 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci https://clang.llvm.org/docs/ClangFormat.html 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci https://clang.llvm.org/docs/ClangFormatStyleOptions.html 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci.. _it_clangformatreview: 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ciRevisionare lo stile di codifica per file e modifiche 558c2ecf20Sopenharmony_ci----------------------------------------------------- 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciEseguendo questo programma, potrete revisionare un intero sottosistema, 588c2ecf20Sopenharmony_cicartella o singoli file alla ricerca di errori di stile, refusi o 598c2ecf20Sopenharmony_cimiglioramenti. 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ciPer farlo, potete eseguire qualcosa del genere:: 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci # Make sure your working directory is clean! 648c2ecf20Sopenharmony_ci clang-format -i kernel/*.[ch] 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ciE poi date un'occhiata a *git diff*. 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciOsservare le righe di questo diff è utile a migliorare/aggiustare 698c2ecf20Sopenharmony_cile opzioni di stile nel file di configurazione; così come per verificare 708c2ecf20Sopenharmony_cile nuove funzionalità/versioni di ``clang-format``. 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci``clang-format`` è in grado di leggere diversi diff unificati, quindi 738c2ecf20Sopenharmony_cipotrete revisionare facilmente delle modifiche e *git diff*. 748c2ecf20Sopenharmony_ciLa documentazione si trova al seguente indirizzo: 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ciPer evitare che ``clang-format`` formatti alcune parti di un file, potete 798c2ecf20Sopenharmony_ciscrivere nel codice:: 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci int formatted_code; 828c2ecf20Sopenharmony_ci // clang-format off 838c2ecf20Sopenharmony_ci void unformatted_code ; 848c2ecf20Sopenharmony_ci // clang-format on 858c2ecf20Sopenharmony_ci void formatted_code_again; 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ciNonostante si attraente l'idea di utilizzarlo per mantenere un file 888c2ecf20Sopenharmony_cisempre in sintonia con ``clang-format``, specialmente per file nuovi o 898c2ecf20Sopenharmony_cise siete un manutentore, ricordatevi che altre persone potrebbero usare 908c2ecf20Sopenharmony_ciuna versione diversa di ``clang-format`` oppure non utilizzarlo del tutto. 918c2ecf20Sopenharmony_ciQuindi, dovreste trattenervi dall'usare questi marcatori nel codice del 928c2ecf20Sopenharmony_cikernel; almeno finché non vediamo che ``clang-format`` è diventato largamente 938c2ecf20Sopenharmony_ciutilizzato. 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ci.. _it_clangformatreformat: 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ciRiformattare blocchi di codice 998c2ecf20Sopenharmony_ci------------------------------ 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ciUtilizzando dei plugin per il vostro editor, potete riformattare una 1028c2ecf20Sopenharmony_ciblocco (selezione) di codice con una singola combinazione di tasti. 1038c2ecf20Sopenharmony_ciQuesto è particolarmente utile: quando si riorganizza il codice, per codice 1048c2ecf20Sopenharmony_cicomplesso, macro multi-riga (e allineare le loro "barre"), eccetera. 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ciRicordatevi che potete sempre aggiustare le modifiche in quei casi dove 1078c2ecf20Sopenharmony_ciquesto strumento non ha fatto un buon lavoro. Ma come prima approssimazione, 1088c2ecf20Sopenharmony_cipuò essere davvero molto utile. 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ciQuesto programma si integra con molti dei più popolari editor. Alcuni di 1118c2ecf20Sopenharmony_ciessi come vim, emacs, BBEdit, Visaul Studio, lo supportano direttamente. 1128c2ecf20Sopenharmony_ciAl seguente indirizzo troverete le istruzioni: 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_ci https://clang.llvm.org/docs/ClangFormat.html 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ciPer Atom, Eclipse, Sublime Text, Visual Studio Code, XCode e altri editor 1178c2ecf20Sopenharmony_cie IDEs dovreste essere in grado di trovare dei plugin pronti all'uso. 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ciPer questo caso d'uso, considerate l'uso di un secondo ``.clang-format`` 1208c2ecf20Sopenharmony_ciche potete personalizzare con le vostre opzioni. 1218c2ecf20Sopenharmony_ciConsultare it_clangformatextra_. 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_ci.. _it_clangformatmissing: 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_ciCose non supportate 1278c2ecf20Sopenharmony_ci------------------- 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci``clang-format`` non ha il supporto per alcune cose che sono comuni nel 1308c2ecf20Sopenharmony_cicodice del kernel. Sono facili da ricordare; quindi, se lo usate 1318c2ecf20Sopenharmony_ciregolarmente, imparerete rapidamente a evitare/ignorare certi problemi. 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ciIn particolare, quelli più comuni che noterete sono: 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_ci - Allineamento di ``#define`` su una singola riga, per esempio:: 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci #define TRACING_MAP_BITS_DEFAULT 11 1388c2ecf20Sopenharmony_ci #define TRACING_MAP_BITS_MAX 17 1398c2ecf20Sopenharmony_ci #define TRACING_MAP_BITS_MIN 7 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_ci contro:: 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci #define TRACING_MAP_BITS_DEFAULT 11 1448c2ecf20Sopenharmony_ci #define TRACING_MAP_BITS_MAX 17 1458c2ecf20Sopenharmony_ci #define TRACING_MAP_BITS_MIN 7 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci - Allineamento dei valori iniziali, per esempio:: 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci static const struct file_operations uprobe_events_ops = { 1508c2ecf20Sopenharmony_ci .owner = THIS_MODULE, 1518c2ecf20Sopenharmony_ci .open = probes_open, 1528c2ecf20Sopenharmony_ci .read = seq_read, 1538c2ecf20Sopenharmony_ci .llseek = seq_lseek, 1548c2ecf20Sopenharmony_ci .release = seq_release, 1558c2ecf20Sopenharmony_ci .write = probes_write, 1568c2ecf20Sopenharmony_ci }; 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ci contro:: 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci static const struct file_operations uprobe_events_ops = { 1618c2ecf20Sopenharmony_ci .owner = THIS_MODULE, 1628c2ecf20Sopenharmony_ci .open = probes_open, 1638c2ecf20Sopenharmony_ci .read = seq_read, 1648c2ecf20Sopenharmony_ci .llseek = seq_lseek, 1658c2ecf20Sopenharmony_ci .release = seq_release, 1668c2ecf20Sopenharmony_ci .write = probes_write, 1678c2ecf20Sopenharmony_ci }; 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci.. _it_clangformatextra: 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_ciFunzionalità e opzioni aggiuntive 1738c2ecf20Sopenharmony_ci--------------------------------- 1748c2ecf20Sopenharmony_ci 1758c2ecf20Sopenharmony_ciAl fine di minimizzare le differenze fra il codice attuale e l'output 1768c2ecf20Sopenharmony_cidel programma, alcune opzioni di stile e funzionalità non sono abilitate 1778c2ecf20Sopenharmony_cinella configurazione base. In altre parole, lo scopo è di rendere le 1788c2ecf20Sopenharmony_cidifferenze le più piccole possibili, permettendo la semplificazione 1798c2ecf20Sopenharmony_cidella revisione di file, differenze e modifiche. 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_ciIn altri casi (per esempio un particolare sottosistema/cartella/file), lo 1828c2ecf20Sopenharmony_cistile del kernel potrebbe essere diverso e abilitare alcune di queste 1838c2ecf20Sopenharmony_ciopzioni potrebbe dare risultati migliori. 1848c2ecf20Sopenharmony_ci 1858c2ecf20Sopenharmony_ciPer esempio: 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_ci - Allineare assegnamenti (``AlignConsecutiveAssignments``). 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_ci - Allineare dichiarazioni (``AlignConsecutiveDeclarations``). 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ci - Riorganizzare il testo nei commenti (``ReflowComments``). 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_ci - Ordinare gli ``#include`` (``SortIncludes``). 1948c2ecf20Sopenharmony_ci 1958c2ecf20Sopenharmony_ciPiuttosto che per interi file, solitamente sono utili per la riformattazione 1968c2ecf20Sopenharmony_cidi singoli blocchi. In alternativa, potete creare un altro file 1978c2ecf20Sopenharmony_ci``.clang-format`` da utilizzare con il vostro editor/IDE. 198