xref: /OK3568_Linux_fs/kernel/Documentation/translations/it_IT/process/clang-format.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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