198 lines
7.1 KiB
ReStructuredText
198 lines
7.1 KiB
ReStructuredText
|
.. include:: ../disclaimer-ita.rst
|
||
|
|
||
|
:Original: :ref:`Documentation/process/clang-format.rst <clangformat>`
|
||
|
:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
|
||
|
|
||
|
.. _it_clangformat:
|
||
|
|
||
|
clang-format
|
||
|
============
|
||
|
``clang-format`` è uno strumento per formattare codice C/C++/... secondo
|
||
|
un gruppo di regole ed euristiche. Come tutti gli strumenti, non è perfetto
|
||
|
e non copre tutti i singoli casi, ma è abbastanza buono per essere utile.
|
||
|
|
||
|
``clang-format`` può essere usato per diversi fini:
|
||
|
|
||
|
- Per riformattare rapidamente un blocco di codice secondo lo stile del
|
||
|
kernel. Particolarmente utile quando si sposta del codice e lo si
|
||
|
allinea/ordina. Vedere it_clangformatreformat_.
|
||
|
|
||
|
- Identificare errori di stile, refusi e possibili miglioramenti nei
|
||
|
file che mantieni, le modifiche che revisioni, le differenze,
|
||
|
eccetera. Vedere it_clangformatreview_.
|
||
|
|
||
|
- Ti aiuta a seguire lo stile del codice, particolarmente utile per i
|
||
|
nuovi arrivati o per coloro che lavorano allo stesso tempo su diversi
|
||
|
progetti con stili di codifica differenti.
|
||
|
|
||
|
Il suo file di configurazione è ``.clang-format`` e si trova nella cartella
|
||
|
principale dei sorgenti del kernel. Le regole scritte in quel file tentano
|
||
|
di approssimare le lo stile di codifica del kernel. Si tenta anche di seguire
|
||
|
il più possibile
|
||
|
:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`.
|
||
|
Dato che non tutto il kernel segue lo stesso stile, potreste voler aggiustare
|
||
|
le regole di base per un particolare sottosistema o cartella. Per farlo,
|
||
|
potete sovrascriverle scrivendole in un altro file ``.clang-format`` in
|
||
|
una sottocartella.
|
||
|
|
||
|
Questo strumento è già stato incluso da molto tempo nelle distribuzioni
|
||
|
Linux più popolari. Cercate ``clang-format`` nel vostro repositorio.
|
||
|
Altrimenti, potete scaricare una versione pre-generata dei binari di LLVM/clang
|
||
|
oppure generarlo dai codici sorgenti:
|
||
|
|
||
|
http://releases.llvm.org/download.html
|
||
|
|
||
|
Troverete più informazioni ai seguenti indirizzi:
|
||
|
|
||
|
https://clang.llvm.org/docs/ClangFormat.html
|
||
|
|
||
|
https://clang.llvm.org/docs/ClangFormatStyleOptions.html
|
||
|
|
||
|
|
||
|
.. _it_clangformatreview:
|
||
|
|
||
|
Revisionare lo stile di codifica per file e modifiche
|
||
|
-----------------------------------------------------
|
||
|
|
||
|
Eseguendo questo programma, potrete revisionare un intero sottosistema,
|
||
|
cartella o singoli file alla ricerca di errori di stile, refusi o
|
||
|
miglioramenti.
|
||
|
|
||
|
Per farlo, potete eseguire qualcosa del genere::
|
||
|
|
||
|
# Make sure your working directory is clean!
|
||
|
clang-format -i kernel/*.[ch]
|
||
|
|
||
|
E poi date un'occhiata a *git diff*.
|
||
|
|
||
|
Osservare le righe di questo diff è utile a migliorare/aggiustare
|
||
|
le opzioni di stile nel file di configurazione; così come per verificare
|
||
|
le nuove funzionalità/versioni di ``clang-format``.
|
||
|
|
||
|
``clang-format`` è in grado di leggere diversi diff unificati, quindi
|
||
|
potrete revisionare facilmente delle modifiche e *git diff*.
|
||
|
La documentazione si trova al seguente indirizzo:
|
||
|
|
||
|
https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting
|
||
|
|
||
|
Per evitare che ``clang-format`` formatti alcune parti di un file, potete
|
||
|
scrivere nel codice::
|
||
|
|
||
|
int formatted_code;
|
||
|
// clang-format off
|
||
|
void unformatted_code ;
|
||
|
// clang-format on
|
||
|
void formatted_code_again;
|
||
|
|
||
|
Nonostante si attraente l'idea di utilizzarlo per mantenere un file
|
||
|
sempre in sintonia con ``clang-format``, specialmente per file nuovi o
|
||
|
se siete un manutentore, ricordatevi che altre persone potrebbero usare
|
||
|
una versione diversa di ``clang-format`` oppure non utilizzarlo del tutto.
|
||
|
Quindi, dovreste trattenervi dall'usare questi marcatori nel codice del
|
||
|
kernel; almeno finché non vediamo che ``clang-format`` è diventato largamente
|
||
|
utilizzato.
|
||
|
|
||
|
|
||
|
.. _it_clangformatreformat:
|
||
|
|
||
|
Riformattare blocchi di codice
|
||
|
------------------------------
|
||
|
|
||
|
Utilizzando dei plugin per il vostro editor, potete riformattare una
|
||
|
blocco (selezione) di codice con una singola combinazione di tasti.
|
||
|
Questo è particolarmente utile: quando si riorganizza il codice, per codice
|
||
|
complesso, macro multi-riga (e allineare le loro "barre"), eccetera.
|
||
|
|
||
|
Ricordatevi che potete sempre aggiustare le modifiche in quei casi dove
|
||
|
questo strumento non ha fatto un buon lavoro. Ma come prima approssimazione,
|
||
|
può essere davvero molto utile.
|
||
|
|
||
|
Questo programma si integra con molti dei più popolari editor. Alcuni di
|
||
|
essi come vim, emacs, BBEdit, Visaul Studio, lo supportano direttamente.
|
||
|
Al seguente indirizzo troverete le istruzioni:
|
||
|
|
||
|
https://clang.llvm.org/docs/ClangFormat.html
|
||
|
|
||
|
Per Atom, Eclipse, Sublime Text, Visual Studio Code, XCode e altri editor
|
||
|
e IDEs dovreste essere in grado di trovare dei plugin pronti all'uso.
|
||
|
|
||
|
Per questo caso d'uso, considerate l'uso di un secondo ``.clang-format``
|
||
|
che potete personalizzare con le vostre opzioni.
|
||
|
Consultare it_clangformatextra_.
|
||
|
|
||
|
|
||
|
.. _it_clangformatmissing:
|
||
|
|
||
|
Cose non supportate
|
||
|
-------------------
|
||
|
|
||
|
``clang-format`` non ha il supporto per alcune cose che sono comuni nel
|
||
|
codice del kernel. Sono facili da ricordare; quindi, se lo usate
|
||
|
regolarmente, imparerete rapidamente a evitare/ignorare certi problemi.
|
||
|
|
||
|
In particolare, quelli più comuni che noterete sono:
|
||
|
|
||
|
- Allineamento di ``#define`` su una singola riga, per esempio::
|
||
|
|
||
|
#define TRACING_MAP_BITS_DEFAULT 11
|
||
|
#define TRACING_MAP_BITS_MAX 17
|
||
|
#define TRACING_MAP_BITS_MIN 7
|
||
|
|
||
|
contro::
|
||
|
|
||
|
#define TRACING_MAP_BITS_DEFAULT 11
|
||
|
#define TRACING_MAP_BITS_MAX 17
|
||
|
#define TRACING_MAP_BITS_MIN 7
|
||
|
|
||
|
- Allineamento dei valori iniziali, per esempio::
|
||
|
|
||
|
static const struct file_operations uprobe_events_ops = {
|
||
|
.owner = THIS_MODULE,
|
||
|
.open = probes_open,
|
||
|
.read = seq_read,
|
||
|
.llseek = seq_lseek,
|
||
|
.release = seq_release,
|
||
|
.write = probes_write,
|
||
|
};
|
||
|
|
||
|
contro::
|
||
|
|
||
|
static const struct file_operations uprobe_events_ops = {
|
||
|
.owner = THIS_MODULE,
|
||
|
.open = probes_open,
|
||
|
.read = seq_read,
|
||
|
.llseek = seq_lseek,
|
||
|
.release = seq_release,
|
||
|
.write = probes_write,
|
||
|
};
|
||
|
|
||
|
|
||
|
.. _it_clangformatextra:
|
||
|
|
||
|
Funzionalità e opzioni aggiuntive
|
||
|
---------------------------------
|
||
|
|
||
|
Al fine di minimizzare le differenze fra il codice attuale e l'output
|
||
|
del programma, alcune opzioni di stile e funzionalità non sono abilitate
|
||
|
nella configurazione base. In altre parole, lo scopo è di rendere le
|
||
|
differenze le più piccole possibili, permettendo la semplificazione
|
||
|
della revisione di file, differenze e modifiche.
|
||
|
|
||
|
In altri casi (per esempio un particolare sottosistema/cartella/file), lo
|
||
|
stile del kernel potrebbe essere diverso e abilitare alcune di queste
|
||
|
opzioni potrebbe dare risultati migliori.
|
||
|
|
||
|
Per esempio:
|
||
|
|
||
|
- Allineare assegnamenti (``AlignConsecutiveAssignments``).
|
||
|
|
||
|
- Allineare dichiarazioni (``AlignConsecutiveDeclarations``).
|
||
|
|
||
|
- Riorganizzare il testo nei commenti (``ReflowComments``).
|
||
|
|
||
|
- Ordinare gli ``#include`` (``SortIncludes``).
|
||
|
|
||
|
Piuttosto che per interi file, solitamente sono utili per la riformattazione
|
||
|
di singoli blocchi. In alternativa, potete creare un altro file
|
||
|
``.clang-format`` da utilizzare con il vostro editor/IDE.
|