162306a36Sopenharmony_ci.. include:: ../disclaimer-ita.rst 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci:Original: :ref:`Documentation/process/clang-format.rst <clangformat>` 462306a36Sopenharmony_ci:Translator: Federico Vaga <federico.vaga@vaga.pv.it> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci.. _it_clangformat: 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciclang-format 962306a36Sopenharmony_ci============ 1062306a36Sopenharmony_ci``clang-format`` è uno strumento per formattare codice C/C++/... secondo 1162306a36Sopenharmony_ciun gruppo di regole ed euristiche. Come tutti gli strumenti, non è perfetto 1262306a36Sopenharmony_cie non copre tutti i singoli casi, ma è abbastanza buono per essere utile. 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci``clang-format`` può essere usato per diversi fini: 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci - Per riformattare rapidamente un blocco di codice secondo lo stile del 1762306a36Sopenharmony_ci kernel. Particolarmente utile quando si sposta del codice e lo si 1862306a36Sopenharmony_ci allinea/ordina. Vedere it_clangformatreformat_. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci - Identificare errori di stile, refusi e possibili miglioramenti nei 2162306a36Sopenharmony_ci file che mantieni, le modifiche che revisioni, le differenze, 2262306a36Sopenharmony_ci eccetera. Vedere it_clangformatreview_. 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci - Ti aiuta a seguire lo stile del codice, particolarmente utile per i 2562306a36Sopenharmony_ci nuovi arrivati o per coloro che lavorano allo stesso tempo su diversi 2662306a36Sopenharmony_ci progetti con stili di codifica differenti. 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ciIl suo file di configurazione è ``.clang-format`` e si trova nella cartella 2962306a36Sopenharmony_ciprincipale dei sorgenti del kernel. Le regole scritte in quel file tentano 3062306a36Sopenharmony_cidi approssimare le lo stile di codifica del kernel. Si tenta anche di seguire 3162306a36Sopenharmony_ciil più possibile 3262306a36Sopenharmony_ci:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`. 3362306a36Sopenharmony_ciDato che non tutto il kernel segue lo stesso stile, potreste voler aggiustare 3462306a36Sopenharmony_cile regole di base per un particolare sottosistema o cartella. Per farlo, 3562306a36Sopenharmony_cipotete sovrascriverle scrivendole in un altro file ``.clang-format`` in 3662306a36Sopenharmony_ciuna sottocartella. 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciQuesto strumento è già stato incluso da molto tempo nelle distribuzioni 3962306a36Sopenharmony_ciLinux più popolari. Cercate ``clang-format`` nel vostro repositorio. 4062306a36Sopenharmony_ciAltrimenti, potete scaricare una versione pre-generata dei binari di LLVM/clang 4162306a36Sopenharmony_cioppure generarlo dai codici sorgenti: 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci https://releases.llvm.org/download.html 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciTroverete più informazioni ai seguenti indirizzi: 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci https://clang.llvm.org/docs/ClangFormat.html 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci https://clang.llvm.org/docs/ClangFormatStyleOptions.html 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci.. _it_clangformatreview: 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciRevisionare lo stile di codifica per file e modifiche 5562306a36Sopenharmony_ci----------------------------------------------------- 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciEseguendo questo programma, potrete revisionare un intero sottosistema, 5862306a36Sopenharmony_cicartella o singoli file alla ricerca di errori di stile, refusi o 5962306a36Sopenharmony_cimiglioramenti. 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciPer farlo, potete eseguire qualcosa del genere:: 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci # Make sure your working directory is clean! 6462306a36Sopenharmony_ci clang-format -i kernel/*.[ch] 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ciE poi date un'occhiata a *git diff*. 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciOsservare le righe di questo diff è utile a migliorare/aggiustare 6962306a36Sopenharmony_cile opzioni di stile nel file di configurazione; così come per verificare 7062306a36Sopenharmony_cile nuove funzionalità/versioni di ``clang-format``. 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci``clang-format`` è in grado di leggere diversi diff unificati, quindi 7362306a36Sopenharmony_cipotrete revisionare facilmente delle modifiche e *git diff*. 7462306a36Sopenharmony_ciLa documentazione si trova al seguente indirizzo: 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciPer evitare che ``clang-format`` formatti alcune parti di un file, potete 7962306a36Sopenharmony_ciscrivere nel codice:: 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci int formatted_code; 8262306a36Sopenharmony_ci // clang-format off 8362306a36Sopenharmony_ci void unformatted_code ; 8462306a36Sopenharmony_ci // clang-format on 8562306a36Sopenharmony_ci void formatted_code_again; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciNonostante si attraente l'idea di utilizzarlo per mantenere un file 8862306a36Sopenharmony_cisempre in sintonia con ``clang-format``, specialmente per file nuovi o 8962306a36Sopenharmony_cise siete un manutentore, ricordatevi che altre persone potrebbero usare 9062306a36Sopenharmony_ciuna versione diversa di ``clang-format`` oppure non utilizzarlo del tutto. 9162306a36Sopenharmony_ciQuindi, dovreste trattenervi dall'usare questi marcatori nel codice del 9262306a36Sopenharmony_cikernel; almeno finché non vediamo che ``clang-format`` è diventato largamente 9362306a36Sopenharmony_ciutilizzato. 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci.. _it_clangformatreformat: 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciRiformattare blocchi di codice 9962306a36Sopenharmony_ci------------------------------ 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ciUtilizzando dei plugin per il vostro editor, potete riformattare una 10262306a36Sopenharmony_ciblocco (selezione) di codice con una singola combinazione di tasti. 10362306a36Sopenharmony_ciQuesto è particolarmente utile: quando si riorganizza il codice, per codice 10462306a36Sopenharmony_cicomplesso, macro multi-riga (e allineare le loro "barre"), eccetera. 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ciRicordatevi che potete sempre aggiustare le modifiche in quei casi dove 10762306a36Sopenharmony_ciquesto strumento non ha fatto un buon lavoro. Ma come prima approssimazione, 10862306a36Sopenharmony_cipuò essere davvero molto utile. 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ciQuesto programma si integra con molti dei più popolari editor. Alcuni di 11162306a36Sopenharmony_ciessi come vim, emacs, BBEdit, Visaul Studio, lo supportano direttamente. 11262306a36Sopenharmony_ciAl seguente indirizzo troverete le istruzioni: 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci https://clang.llvm.org/docs/ClangFormat.html 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ciPer Atom, Eclipse, Sublime Text, Visual Studio Code, XCode e altri editor 11762306a36Sopenharmony_cie IDEs dovreste essere in grado di trovare dei plugin pronti all'uso. 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ciPer questo caso d'uso, considerate l'uso di un secondo ``.clang-format`` 12062306a36Sopenharmony_ciche potete personalizzare con le vostre opzioni. 12162306a36Sopenharmony_ciConsultare it_clangformatextra_. 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci.. _it_clangformatmissing: 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ciCose non supportate 12762306a36Sopenharmony_ci------------------- 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci``clang-format`` non ha il supporto per alcune cose che sono comuni nel 13062306a36Sopenharmony_cicodice del kernel. Sono facili da ricordare; quindi, se lo usate 13162306a36Sopenharmony_ciregolarmente, imparerete rapidamente a evitare/ignorare certi problemi. 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ciIn particolare, quelli più comuni che noterete sono: 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci - Allineamento di ``#define`` su una singola riga, per esempio:: 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci #define TRACING_MAP_BITS_DEFAULT 11 13862306a36Sopenharmony_ci #define TRACING_MAP_BITS_MAX 17 13962306a36Sopenharmony_ci #define TRACING_MAP_BITS_MIN 7 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci contro:: 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci #define TRACING_MAP_BITS_DEFAULT 11 14462306a36Sopenharmony_ci #define TRACING_MAP_BITS_MAX 17 14562306a36Sopenharmony_ci #define TRACING_MAP_BITS_MIN 7 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci - Allineamento dei valori iniziali, per esempio:: 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci static const struct file_operations uprobe_events_ops = { 15062306a36Sopenharmony_ci .owner = THIS_MODULE, 15162306a36Sopenharmony_ci .open = probes_open, 15262306a36Sopenharmony_ci .read = seq_read, 15362306a36Sopenharmony_ci .llseek = seq_lseek, 15462306a36Sopenharmony_ci .release = seq_release, 15562306a36Sopenharmony_ci .write = probes_write, 15662306a36Sopenharmony_ci }; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci contro:: 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci static const struct file_operations uprobe_events_ops = { 16162306a36Sopenharmony_ci .owner = THIS_MODULE, 16262306a36Sopenharmony_ci .open = probes_open, 16362306a36Sopenharmony_ci .read = seq_read, 16462306a36Sopenharmony_ci .llseek = seq_lseek, 16562306a36Sopenharmony_ci .release = seq_release, 16662306a36Sopenharmony_ci .write = probes_write, 16762306a36Sopenharmony_ci }; 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci.. _it_clangformatextra: 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ciFunzionalità e opzioni aggiuntive 17362306a36Sopenharmony_ci--------------------------------- 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ciAl fine di minimizzare le differenze fra il codice attuale e l'output 17662306a36Sopenharmony_cidel programma, alcune opzioni di stile e funzionalità non sono abilitate 17762306a36Sopenharmony_cinella configurazione base. In altre parole, lo scopo è di rendere le 17862306a36Sopenharmony_cidifferenze le più piccole possibili, permettendo la semplificazione 17962306a36Sopenharmony_cidella revisione di file, differenze e modifiche. 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ciIn altri casi (per esempio un particolare sottosistema/cartella/file), lo 18262306a36Sopenharmony_cistile del kernel potrebbe essere diverso e abilitare alcune di queste 18362306a36Sopenharmony_ciopzioni potrebbe dare risultati migliori. 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ciPer esempio: 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci - Allineare assegnamenti (``AlignConsecutiveAssignments``). 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci - Allineare dichiarazioni (``AlignConsecutiveDeclarations``). 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci - Riorganizzare il testo nei commenti (``ReflowComments``). 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci - Ordinare gli ``#include`` (``SortIncludes``). 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ciPiuttosto che per interi file, solitamente sono utili per la riformattazione 19662306a36Sopenharmony_cidi singoli blocchi. In alternativa, potete creare un altro file 19762306a36Sopenharmony_ci``.clang-format`` da utilizzare con il vostro editor/IDE. 198