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