162306a36Sopenharmony_ci.. include:: ../disclaimer-ita.rst
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci.. note:: Per leggere la documentazione originale in inglese:
462306a36Sopenharmony_ci	  :ref:`Documentation/doc-guide/index.rst <doc_guide>`
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci.. title:: Commenti in kernel-doc
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci.. _it_kernel_doc:
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci=================================
1162306a36Sopenharmony_ciScrivere i commenti in kernel-doc
1262306a36Sopenharmony_ci=================================
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciNei file sorgenti del kernel Linux potrete trovare commenti di documentazione
1562306a36Sopenharmony_cistrutturanti secondo il formato kernel-doc. Essi possono descrivere funzioni,
1662306a36Sopenharmony_citipi di dati, e l'architettura del codice.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci.. note:: Il formato kernel-doc può sembrare simile a gtk-doc o Doxygen ma
1962306a36Sopenharmony_ci   in realtà è molto differente per ragioni storiche. I sorgenti del kernel
2062306a36Sopenharmony_ci   contengono decine di migliaia di commenti kernel-doc. Siete pregati
2162306a36Sopenharmony_ci   d'attenervi allo stile qui descritto.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciLa struttura kernel-doc è estratta a partire dai commenti; da questi viene
2462306a36Sopenharmony_cigenerato il `dominio Sphinx per il C`_ con un'adeguata descrizione per le
2562306a36Sopenharmony_cifunzioni ed i tipi di dato con i loro relativi collegamenti. Le descrizioni
2662306a36Sopenharmony_civengono filtrare per cercare i riferimenti ed i marcatori.
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciVedere di seguito per maggiori dettagli.
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci.. _`dominio Sphinx per il C`: http://www.sphinx-doc.org/en/stable/domains.html
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciTutte le funzioni esportate verso i moduli esterni utilizzando
3362306a36Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` dovrebbero avere un commento
3462306a36Sopenharmony_cikernel-doc. Quando l'intenzione è di utilizzarle nei moduli, anche le funzioni
3562306a36Sopenharmony_cie le strutture dati nei file d'intestazione dovrebbero avere dei commenti
3662306a36Sopenharmony_cikernel-doc.
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciÈ considerata una buona pratica quella di fornire una documentazione formattata
3962306a36Sopenharmony_cisecondo kernel-doc per le funzioni che sono visibili da altri file del kernel
4062306a36Sopenharmony_ci(ovvero, che non siano dichiarate utilizzando ``static``). Raccomandiamo,
4162306a36Sopenharmony_ciinoltre, di fornire una documentazione kernel-doc anche per procedure private
4262306a36Sopenharmony_ci(ovvero, dichiarate "static") al fine di fornire una struttura più coerente
4362306a36Sopenharmony_cidei sorgenti. Quest'ultima raccomandazione ha una priorità più bassa ed è a
4462306a36Sopenharmony_cidiscrezione dal manutentore (MAINTAINER) del file sorgente.
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ciSicuramente la documentazione formattata con kernel-doc è necessaria per
4962306a36Sopenharmony_cile funzioni che sono esportate verso i moduli esterni utilizzando
5062306a36Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL``.
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciCerchiamo anche di fornire una documentazione formattata secondo kernel-doc
5362306a36Sopenharmony_ciper le funzioni che sono visibili da altri file del kernel (ovvero, che non
5462306a36Sopenharmony_cisiano dichiarate utilizzando "static")
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciRaccomandiamo, inoltre, di fornire una documentazione formattata con kernel-doc
5762306a36Sopenharmony_cianche per procedure private (ovvero, dichiarate "static") al fine di fornire
5862306a36Sopenharmony_ciuna struttura più coerente dei sorgenti. Questa raccomandazione ha una priorità
5962306a36Sopenharmony_cipiù bassa ed è a discrezione dal manutentore (MAINTAINER) del file sorgente.
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ciLe strutture dati visibili nei file di intestazione dovrebbero essere anch'esse
6262306a36Sopenharmony_cidocumentate utilizzando commenti formattati con kernel-doc.
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ciCome formattare i commenti kernel-doc
6562306a36Sopenharmony_ci-------------------------------------
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciI commenti kernel-doc iniziano con il marcatore ``/**``. Il programma
6862306a36Sopenharmony_ci``kernel-doc`` estrarrà i commenti marchiati in questo modo. Il resto
6962306a36Sopenharmony_cidel commento è formattato come un normale commento multilinea, ovvero
7062306a36Sopenharmony_cicon un asterisco all'inizio d'ogni riga e che si conclude con ``*/``
7162306a36Sopenharmony_cisu una riga separata.
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ciI commenti kernel-doc di funzioni e tipi dovrebbero essere posizionati
7462306a36Sopenharmony_ciappena sopra la funzione od il tipo che descrivono. Questo allo scopo di
7562306a36Sopenharmony_ciaumentare la probabilità che chi cambia il codice si ricordi di aggiornare
7662306a36Sopenharmony_cianche la documentazione. I commenti kernel-doc di tipo più generale possono
7762306a36Sopenharmony_ciessere posizionati ovunque nel file.
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciAl fine di verificare che i commenti siano formattati correttamente, potete
8062306a36Sopenharmony_cieseguire il programma ``kernel-doc`` con un livello di verbosità alto e senza
8162306a36Sopenharmony_ciche questo produca alcuna documentazione. Per esempio::
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci	scripts/kernel-doc -v -none drivers/foo/bar.c
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciIl formato della documentazione è verificato della procedura di generazione
8662306a36Sopenharmony_cidel kernel quando viene richiesto di effettuare dei controlli extra con GCC::
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	make W=n
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ciDocumentare le funzioni
9162306a36Sopenharmony_ci------------------------
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per funzioni e
9462306a36Sopenharmony_cimacro simil-funzioni è il seguente::
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci  /**
9762306a36Sopenharmony_ci   * function_name() - Brief description of function.
9862306a36Sopenharmony_ci   * @arg1: Describe the first argument.
9962306a36Sopenharmony_ci   * @arg2: Describe the second argument.
10062306a36Sopenharmony_ci   *        One can provide multiple line descriptions
10162306a36Sopenharmony_ci   *        for arguments.
10262306a36Sopenharmony_ci   *
10362306a36Sopenharmony_ci   * A longer description, with more discussion of the function function_name()
10462306a36Sopenharmony_ci   * that might be useful to those using or modifying it. Begins with an
10562306a36Sopenharmony_ci   * empty comment line, and may include additional embedded empty
10662306a36Sopenharmony_ci   * comment lines.
10762306a36Sopenharmony_ci   *
10862306a36Sopenharmony_ci   * The longer description may have multiple paragraphs.
10962306a36Sopenharmony_ci   *
11062306a36Sopenharmony_ci   * Context: Describes whether the function can sleep, what locks it takes,
11162306a36Sopenharmony_ci   *          releases, or expects to be held. It can extend over multiple
11262306a36Sopenharmony_ci   *          lines.
11362306a36Sopenharmony_ci   * Return: Describe the return value of function_name.
11462306a36Sopenharmony_ci   *
11562306a36Sopenharmony_ci   * The return value description can also have multiple paragraphs, and should
11662306a36Sopenharmony_ci   * be placed at the end of the comment block.
11762306a36Sopenharmony_ci   */
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della
12062306a36Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di
12162306a36Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento.
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciParametri delle funzioni
12462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ciOgni argomento di una funzione dovrebbe essere descritto in ordine, subito
12762306a36Sopenharmony_cidopo la descrizione introduttiva.  Non lasciare righe vuote né fra la
12862306a36Sopenharmony_cidescrizione introduttiva e quella degli argomenti, né fra gli argomenti.
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciOgni ``@argument:`` può estendersi su più righe.
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci.. note::
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci   Se la descrizione di ``@argument:`` si estende su più righe,
13562306a36Sopenharmony_ci   la continuazione dovrebbe iniziare alla stessa colonna della riga
13662306a36Sopenharmony_ci   precedente::
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci      * @argument: some long description
13962306a36Sopenharmony_ci      *            that continues on next lines
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci   or::
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci      * @argument:
14462306a36Sopenharmony_ci      *		some long description
14562306a36Sopenharmony_ci      *		that continues on next lines
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ciSe una funzione ha un numero variabile di argomento, la sua descrizione
14862306a36Sopenharmony_cidovrebbe essere scritta con la notazione kernel-doc::
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci      * @...: description
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ciContesto delle funzioni
15362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ciIl contesto in cui le funzioni vengono chiamate viene descritto in una
15662306a36Sopenharmony_cisezione chiamata ``Context``. Questo dovrebbe informare sulla possibilità
15762306a36Sopenharmony_ciche una funzione dorma (*sleep*) o che possa essere chiamata in un contesto
15862306a36Sopenharmony_cid'interruzione, così come i *lock* che prende, rilascia e che si aspetta che
15962306a36Sopenharmony_civengano presi dal chiamante.
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ciEsempi::
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci  * Context: Any context.
16462306a36Sopenharmony_ci  * Context: Any context. Takes and releases the RCU lock.
16562306a36Sopenharmony_ci  * Context: Any context. Expects <lock> to be held by caller.
16662306a36Sopenharmony_ci  * Context: Process context. May sleep if @gfp flags permit.
16762306a36Sopenharmony_ci  * Context: Process context. Takes and releases <mutex>.
16862306a36Sopenharmony_ci  * Context: Softirq or process context. Takes and releases <lock>, BH-safe.
16962306a36Sopenharmony_ci  * Context: Interrupt context.
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ciValore di ritorno
17262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ciIl valore di ritorno, se c'è, viene descritto in una sezione dedicata di nome
17562306a36Sopenharmony_ci``Return``.
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci.. note::
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci  #) La descrizione multiriga non riconosce il termine d'una riga, per cui
18062306a36Sopenharmony_ci     se provate a formattare bene il vostro testo come nel seguente esempio::
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci	* Return:
18362306a36Sopenharmony_ci	* 0 - OK
18462306a36Sopenharmony_ci	* -EINVAL - invalid argument
18562306a36Sopenharmony_ci	* -ENOMEM - out of memory
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci     le righe verranno unite e il risultato sarà::
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci	Return: 0 - OK -EINVAL - invalid argument -ENOMEM - out of memory
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci     Quindi, se volete che le righe vengano effettivamente generate, dovete
19262306a36Sopenharmony_ci     utilizzare una lista ReST, ad esempio::
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci      * Return:
19562306a36Sopenharmony_ci      * * 0		- OK to runtime suspend the device
19662306a36Sopenharmony_ci      * * -EBUSY	- Device should not be runtime suspended
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci  #) Se il vostro testo ha delle righe che iniziano con una frase seguita dai
19962306a36Sopenharmony_ci     due punti, allora ognuna di queste frasi verrà considerata come il nome
20062306a36Sopenharmony_ci     di una nuova sezione, e probabilmente non produrrà gli effetti desiderati.
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ciDocumentare strutture, unioni ed enumerazioni
20362306a36Sopenharmony_ci---------------------------------------------
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per struct, union ed enum è::
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci  /**
20862306a36Sopenharmony_ci   * struct struct_name - Brief description.
20962306a36Sopenharmony_ci   * @member1: Description of member1.
21062306a36Sopenharmony_ci   * @member2: Description of member2.
21162306a36Sopenharmony_ci   *           One can provide multiple line descriptions
21262306a36Sopenharmony_ci   *           for members.
21362306a36Sopenharmony_ci   *
21462306a36Sopenharmony_ci   * Description of the structure.
21562306a36Sopenharmony_ci   */
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_ciNell'esempio qui sopra, potete sostituire ``struct`` con ``union`` o ``enum``
21862306a36Sopenharmony_ciper descrivere unioni ed enumerati. ``member`` viene usato per indicare i
21962306a36Sopenharmony_cimembri di strutture ed unioni, ma anche i valori di un tipo enumerato.
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della
22262306a36Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di
22362306a36Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento.
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ciMembri
22662306a36Sopenharmony_ci~~~~~~
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ciI membri di strutture, unioni ed enumerati devo essere documentati come i
22962306a36Sopenharmony_ciparametri delle funzioni; seguono la descrizione introduttiva e possono
23062306a36Sopenharmony_ciestendersi su più righe.
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ciAll'interno d'una struttura o d'un unione, potete utilizzare le etichette
23362306a36Sopenharmony_ci``private:`` e ``public:``. I campi che sono nell'area ``private:`` non
23462306a36Sopenharmony_civerranno inclusi nella documentazione finale.
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ciLe etichette ``private:`` e ``public:`` devono essere messe subito dopo
23762306a36Sopenharmony_ciil marcatore di un commento ``/*``. Opzionalmente, possono includere commenti
23862306a36Sopenharmony_cifra ``:`` e il marcatore di fine commento ``*/``.
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ciEsempio::
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ci  /**
24362306a36Sopenharmony_ci   * struct my_struct - short description
24462306a36Sopenharmony_ci   * @a: first member
24562306a36Sopenharmony_ci   * @b: second member
24662306a36Sopenharmony_ci   * @d: fourth member
24762306a36Sopenharmony_ci   *
24862306a36Sopenharmony_ci   * Longer description
24962306a36Sopenharmony_ci   */
25062306a36Sopenharmony_ci  struct my_struct {
25162306a36Sopenharmony_ci      int a;
25262306a36Sopenharmony_ci      int b;
25362306a36Sopenharmony_ci  /* private: internal use only */
25462306a36Sopenharmony_ci      int c;
25562306a36Sopenharmony_ci  /* public: the next one is public */
25662306a36Sopenharmony_ci      int d;
25762306a36Sopenharmony_ci  };
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_ciStrutture ed unioni annidate
26062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ciÈ possibile documentare strutture ed unioni annidate, ad esempio::
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci      /**
26562306a36Sopenharmony_ci       * struct nested_foobar - a struct with nested unions and structs
26662306a36Sopenharmony_ci       * @memb1: first member of anonymous union/anonymous struct
26762306a36Sopenharmony_ci       * @memb2: second member of anonymous union/anonymous struct
26862306a36Sopenharmony_ci       * @memb3: third member of anonymous union/anonymous struct
26962306a36Sopenharmony_ci       * @memb4: fourth member of anonymous union/anonymous struct
27062306a36Sopenharmony_ci       * @bar: non-anonymous union
27162306a36Sopenharmony_ci       * @bar.st1: struct st1 inside @bar
27262306a36Sopenharmony_ci       * @bar.st2: struct st2 inside @bar
27362306a36Sopenharmony_ci       * @bar.st1.memb1: first member of struct st1 on union bar
27462306a36Sopenharmony_ci       * @bar.st1.memb2: second member of struct st1 on union bar
27562306a36Sopenharmony_ci       * @bar.st2.memb1: first member of struct st2 on union bar
27662306a36Sopenharmony_ci       * @bar.st2.memb2: second member of struct st2 on union bar
27762306a36Sopenharmony_ci       */
27862306a36Sopenharmony_ci      struct nested_foobar {
27962306a36Sopenharmony_ci        /* Anonymous union/struct*/
28062306a36Sopenharmony_ci        union {
28162306a36Sopenharmony_ci          struct {
28262306a36Sopenharmony_ci            int memb1;
28362306a36Sopenharmony_ci            int memb2;
28462306a36Sopenharmony_ci        }
28562306a36Sopenharmony_ci          struct {
28662306a36Sopenharmony_ci            void *memb3;
28762306a36Sopenharmony_ci            int memb4;
28862306a36Sopenharmony_ci          }
28962306a36Sopenharmony_ci        }
29062306a36Sopenharmony_ci        union {
29162306a36Sopenharmony_ci          struct {
29262306a36Sopenharmony_ci            int memb1;
29362306a36Sopenharmony_ci            int memb2;
29462306a36Sopenharmony_ci          } st1;
29562306a36Sopenharmony_ci          struct {
29662306a36Sopenharmony_ci            void *memb1;
29762306a36Sopenharmony_ci            int memb2;
29862306a36Sopenharmony_ci          } st2;
29962306a36Sopenharmony_ci        } bar;
30062306a36Sopenharmony_ci      };
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci.. note::
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci   #) Quando documentate una struttura od unione annidata, ad esempio
30562306a36Sopenharmony_ci      di nome ``foo``, il suo campo ``bar`` dev'essere documentato
30662306a36Sopenharmony_ci      usando ``@foo.bar:``
30762306a36Sopenharmony_ci   #) Quando la struttura od unione annidata è anonima, il suo campo
30862306a36Sopenharmony_ci      ``bar`` dev'essere documentato usando ``@bar:``
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ciCommenti in linea per la documentazione dei membri
31162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ciI membri d'una struttura possono essere documentati in linea all'interno
31462306a36Sopenharmony_cidella definizione stessa. Ci sono due stili: una singola riga di commento
31562306a36Sopenharmony_ciche inizia con ``/**`` e finisce con ``*/``; commenti multi riga come
31662306a36Sopenharmony_ciqualsiasi altro commento kernel-doc::
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci  /**
31962306a36Sopenharmony_ci   * struct foo - Brief description.
32062306a36Sopenharmony_ci   * @foo: The Foo member.
32162306a36Sopenharmony_ci   */
32262306a36Sopenharmony_ci  struct foo {
32362306a36Sopenharmony_ci        int foo;
32462306a36Sopenharmony_ci        /**
32562306a36Sopenharmony_ci         * @bar: The Bar member.
32662306a36Sopenharmony_ci         */
32762306a36Sopenharmony_ci        int bar;
32862306a36Sopenharmony_ci        /**
32962306a36Sopenharmony_ci         * @baz: The Baz member.
33062306a36Sopenharmony_ci         *
33162306a36Sopenharmony_ci         * Here, the member description may contain several paragraphs.
33262306a36Sopenharmony_ci         */
33362306a36Sopenharmony_ci        int baz;
33462306a36Sopenharmony_ci        union {
33562306a36Sopenharmony_ci                /** @foobar: Single line description. */
33662306a36Sopenharmony_ci                int foobar;
33762306a36Sopenharmony_ci        };
33862306a36Sopenharmony_ci        /** @bar2: Description for struct @bar2 inside @foo */
33962306a36Sopenharmony_ci        struct {
34062306a36Sopenharmony_ci                /**
34162306a36Sopenharmony_ci                 * @bar2.barbar: Description for @barbar inside @foo.bar2
34262306a36Sopenharmony_ci                 */
34362306a36Sopenharmony_ci                int barbar;
34462306a36Sopenharmony_ci        } bar2;
34562306a36Sopenharmony_ci  };
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ciDocumentazione dei tipi di dato
34962306a36Sopenharmony_ci-------------------------------
35062306a36Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per typedef è
35162306a36Sopenharmony_ciil seguente::
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci  /**
35462306a36Sopenharmony_ci   * typedef type_name - Brief description.
35562306a36Sopenharmony_ci   *
35662306a36Sopenharmony_ci   * Description of the type.
35762306a36Sopenharmony_ci   */
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ciAnche i tipi di dato per prototipi di funzione possono essere documentati::
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci  /**
36262306a36Sopenharmony_ci   * typedef type_name - Brief description.
36362306a36Sopenharmony_ci   * @arg1: description of arg1
36462306a36Sopenharmony_ci   * @arg2: description of arg2
36562306a36Sopenharmony_ci   *
36662306a36Sopenharmony_ci   * Description of the type.
36762306a36Sopenharmony_ci   *
36862306a36Sopenharmony_ci   * Context: Locking context.
36962306a36Sopenharmony_ci   * Return: Meaning of the return value.
37062306a36Sopenharmony_ci   */
37162306a36Sopenharmony_ci   typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2);
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ciMarcatori e riferimenti
37462306a36Sopenharmony_ci-----------------------
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ciAll'interno dei commenti di tipo kernel-doc vengono riconosciuti i seguenti
37762306a36Sopenharmony_ci*pattern* che vengono convertiti in marcatori reStructuredText ed in riferimenti
37862306a36Sopenharmony_cidel `dominio Sphinx per il C`_.
37962306a36Sopenharmony_ci
38062306a36Sopenharmony_ci.. attention:: Questi sono riconosciuti **solo** all'interno di commenti
38162306a36Sopenharmony_ci               kernel-doc, e **non** all'interno di documenti reStructuredText.
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci``funcname()``
38462306a36Sopenharmony_ci  Riferimento ad una funzione.
38562306a36Sopenharmony_ci
38662306a36Sopenharmony_ci``@parameter``
38762306a36Sopenharmony_ci  Nome di un parametro di una funzione (nessun riferimento, solo formattazione).
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ci``%CONST``
39062306a36Sopenharmony_ci  Il nome di una costante (nessun riferimento, solo formattazione)
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_ci````literal````
39362306a36Sopenharmony_ci  Un blocco di testo che deve essere riportato così com'è. La rappresentazione
39462306a36Sopenharmony_ci  finale utilizzerà caratteri a ``spaziatura fissa``.
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci  Questo è utile se dovete utilizzare caratteri speciali che altrimenti
39762306a36Sopenharmony_ci  potrebbero assumere un significato diverso in kernel-doc o in reStructuredText
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ci  Questo è particolarmente utile se dovete scrivere qualcosa come ``%ph``
40062306a36Sopenharmony_ci  all'interno della descrizione di una funzione.
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci``$ENVVAR``
40362306a36Sopenharmony_ci  Il nome di una variabile d'ambiente (nessun riferimento, solo formattazione).
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_ci``&struct name``
40662306a36Sopenharmony_ci  Riferimento ad una struttura.
40762306a36Sopenharmony_ci
40862306a36Sopenharmony_ci``&enum name``
40962306a36Sopenharmony_ci  Riferimento ad un'enumerazione.
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci``&typedef name``
41262306a36Sopenharmony_ci  Riferimento ad un tipo di dato.
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_ci``&struct_name->member`` or ``&struct_name.member``
41562306a36Sopenharmony_ci  Riferimento ad un membro di una struttura o di un'unione. Il riferimento sarà
41662306a36Sopenharmony_ci  la struttura o l'unione, non il memembro.
41762306a36Sopenharmony_ci
41862306a36Sopenharmony_ci``&name``
41962306a36Sopenharmony_ci  Un generico riferimento ad un tipo. Usate, preferibilmente, il riferimento
42062306a36Sopenharmony_ci  completo come descritto sopra. Questo è dedicato ai commenti obsoleti.
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_ciRiferimenti usando reStructuredText
42362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42462306a36Sopenharmony_ci
42562306a36Sopenharmony_ciNei documenti reStructuredText non serve alcuna sintassi speciale per
42662306a36Sopenharmony_cifare riferimento a funzioni e tipi definiti nei commenti
42762306a36Sopenharmony_cikernel-doc. Sarà sufficiente terminare i nomi di funzione con ``()``,
42862306a36Sopenharmony_cie scrivere ``struct``, ``union``, ``enum``, o ``typedef`` prima di un
42962306a36Sopenharmony_citipo. Per esempio::
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_ci  See foo()
43262306a36Sopenharmony_ci  See struct foo.
43362306a36Sopenharmony_ci  See union bar.
43462306a36Sopenharmony_ci  See enum baz.
43562306a36Sopenharmony_ci  See typedef meh.
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ciTuttavia, la personalizzazione dei collegamenti è possibile solo con
43862306a36Sopenharmony_cila seguente sintassi::
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ci  See :c:func:`my custom link text for function foo <foo>`.
44162306a36Sopenharmony_ci  See :c:type:`my custom link text for struct bar <bar>`.
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_ciCommenti per una documentazione generale
44562306a36Sopenharmony_ci----------------------------------------
44662306a36Sopenharmony_ci
44762306a36Sopenharmony_ciAl fine d'avere il codice ed i commenti nello stesso file, potete includere
44862306a36Sopenharmony_cidei blocchi di documentazione kernel-doc con un formato libero invece
44962306a36Sopenharmony_ciche nel formato specifico per funzioni, strutture, unioni, enumerati o tipi
45062306a36Sopenharmony_cidi dato. Per esempio, questo tipo di commento potrebbe essere usato per la
45162306a36Sopenharmony_cispiegazione delle operazioni di un driver o di una libreria
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ciQuesto s'ottiene utilizzando la parola chiave ``DOC:`` a cui viene associato
45462306a36Sopenharmony_ciun titolo.
45562306a36Sopenharmony_ci
45662306a36Sopenharmony_ciGeneralmente il formato di un commento generico o di visione d'insieme è
45762306a36Sopenharmony_ciil seguente::
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_ci  /**
46062306a36Sopenharmony_ci   * DOC: Theory of Operation
46162306a36Sopenharmony_ci   *
46262306a36Sopenharmony_ci   * The whizbang foobar is a dilly of a gizmo. It can do whatever you
46362306a36Sopenharmony_ci   * want it to do, at any time. It reads your mind. Here's how it works.
46462306a36Sopenharmony_ci   *
46562306a36Sopenharmony_ci   * foo bar splat
46662306a36Sopenharmony_ci   *
46762306a36Sopenharmony_ci   * The only drawback to this gizmo is that is can sometimes damage
46862306a36Sopenharmony_ci   * hardware, software, or its subject(s).
46962306a36Sopenharmony_ci   */
47062306a36Sopenharmony_ci
47162306a36Sopenharmony_ciIl titolo che segue ``DOC:`` funziona da intestazione all'interno del file
47262306a36Sopenharmony_cisorgente, ma anche come identificatore per l'estrazione di questi commenti di
47362306a36Sopenharmony_cidocumentazione. Quindi, il titolo dev'essere unico all'interno del file.
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ci=======================================
47662306a36Sopenharmony_ciIncludere i commenti di tipo kernel-doc
47762306a36Sopenharmony_ci=======================================
47862306a36Sopenharmony_ci
47962306a36Sopenharmony_ciI commenti di documentazione possono essere inclusi in un qualsiasi documento
48062306a36Sopenharmony_cidi tipo reStructuredText mediante l'apposita direttiva nell'estensione
48162306a36Sopenharmony_cikernel-doc per Sphinx.
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ciLe direttive kernel-doc sono nel formato::
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ci  .. kernel-doc:: source
48662306a36Sopenharmony_ci     :option:
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ciIl campo *source* è il percorso ad un file sorgente, relativo alla cartella
48962306a36Sopenharmony_ciprincipale dei sorgenti del kernel. La direttiva supporta le seguenti opzioni:
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ciexport: *[source-pattern ...]*
49262306a36Sopenharmony_ci  Include la documentazione per tutte le funzioni presenti nel file sorgente
49362306a36Sopenharmony_ci  (*source*) che sono state esportate utilizzando ``EXPORT_SYMBOL`` o
49462306a36Sopenharmony_ci  ``EXPORT_SYMBOL_GPL`` in *source* o in qualsiasi altro *source-pattern*
49562306a36Sopenharmony_ci  specificato.
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_ci  Il campo *source-patter* è utile quando i commenti kernel-doc sono stati
49862306a36Sopenharmony_ci  scritti nei file d'intestazione, mentre ``EXPORT_SYMBOL`` e
49962306a36Sopenharmony_ci  ``EXPORT_SYMBOL_GPL`` si trovano vicino alla definizione delle funzioni.
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_ci  Esempi::
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ci    .. kernel-doc:: lib/bitmap.c
50462306a36Sopenharmony_ci       :export:
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_ci    .. kernel-doc:: include/net/mac80211.h
50762306a36Sopenharmony_ci       :export: net/mac80211/*.c
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_ciinternal: *[source-pattern ...]*
51062306a36Sopenharmony_ci  Include la documentazione per tutte le funzioni ed i tipi presenti nel file
51162306a36Sopenharmony_ci  sorgente (*source*) che **non** sono stati esportati utilizzando
51262306a36Sopenharmony_ci  ``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` né in *source* né in qualsiasi
51362306a36Sopenharmony_ci  altro *source-pattern* specificato.
51462306a36Sopenharmony_ci
51562306a36Sopenharmony_ci  Esempio::
51662306a36Sopenharmony_ci
51762306a36Sopenharmony_ci    .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
51862306a36Sopenharmony_ci       :internal:
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_ciidentifiers: *[ function/type ...]*
52162306a36Sopenharmony_ci  Include la documentazione per ogni *function* e *type*  in *source*.
52262306a36Sopenharmony_ci  Se non vengono esplicitamente specificate le funzioni da includere, allora
52362306a36Sopenharmony_ci  verranno incluse tutte quelle disponibili in *source*.
52462306a36Sopenharmony_ci
52562306a36Sopenharmony_ci  Esempi::
52662306a36Sopenharmony_ci
52762306a36Sopenharmony_ci    .. kernel-doc:: lib/bitmap.c
52862306a36Sopenharmony_ci       :identifiers: bitmap_parselist bitmap_parselist_user
52962306a36Sopenharmony_ci
53062306a36Sopenharmony_ci    .. kernel-doc:: lib/idr.c
53162306a36Sopenharmony_ci       :identifiers:
53262306a36Sopenharmony_ci
53362306a36Sopenharmony_cifunctions: *[ function ...]*
53462306a36Sopenharmony_ci  Questo è uno pseudonimo, deprecato, per la direttiva 'identifiers'.
53562306a36Sopenharmony_ci
53662306a36Sopenharmony_cidoc: *title*
53762306a36Sopenharmony_ci  Include la documentazione del paragrafo ``DOC:`` identificato dal titolo
53862306a36Sopenharmony_ci  (*title*) all'interno del file sorgente (*source*). Gli spazi in *title* sono
53962306a36Sopenharmony_ci  permessi; non virgolettate *title*. Il campo *title* è utilizzato per
54062306a36Sopenharmony_ci  identificare un paragrafo e per questo non viene incluso nella documentazione
54162306a36Sopenharmony_ci  finale. Verificate d'avere l'intestazione appropriata nei documenti
54262306a36Sopenharmony_ci  reStructuredText.
54362306a36Sopenharmony_ci
54462306a36Sopenharmony_ci  Esempio::
54562306a36Sopenharmony_ci
54662306a36Sopenharmony_ci    .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
54762306a36Sopenharmony_ci       :doc: High Definition Audio over HDMI and Display Port
54862306a36Sopenharmony_ci
54962306a36Sopenharmony_ciSenza alcuna opzione, la direttiva kernel-doc include tutti i commenti di
55062306a36Sopenharmony_cidocumentazione presenti nel file sorgente (*source*).
55162306a36Sopenharmony_ci
55262306a36Sopenharmony_ciL'estensione kernel-doc fa parte dei sorgenti del kernel, la si può trovare
55362306a36Sopenharmony_ciin ``Documentation/sphinx/kerneldoc.py``. Internamente, viene utilizzato
55462306a36Sopenharmony_cilo script ``scripts/kernel-doc`` per estrarre i commenti di documentazione
55562306a36Sopenharmony_cidai file sorgenti.
55662306a36Sopenharmony_ci
55762306a36Sopenharmony_ciCome utilizzare kernel-doc per generare pagine man
55862306a36Sopenharmony_ci--------------------------------------------------
55962306a36Sopenharmony_ci
56062306a36Sopenharmony_ciSe volete utilizzare kernel-doc solo per generare delle pagine man, potete
56162306a36Sopenharmony_cifarlo direttamente dai sorgenti del kernel::
56262306a36Sopenharmony_ci
56362306a36Sopenharmony_ci  $ scripts/kernel-doc -man $(git grep -l '/\*\*' -- :^Documentation :^tools) | scripts/split-man.pl /tmp/man
564