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