Swift ha il supporto per la generazione di documentazione?


238

Molte lingue supportano i commenti della documentazione per consentire a un generatore (like javadoco doxygen ) di generare la documentazione del codice analizzando lo stesso codice.

Swift ha qualche tipo di commento di documentazione come questo?


Sapendo che Xcode con obiettiva-c consente commenti sulla documentazione, credo che Apple aggiungerà questa opzione a Xcode con rapidità nel prossimo futuro (tuttavia, è solo una supposizione, non ho prove)
Garoal

@ Δdeveloper Supponevo lo stesso, ma dato che non ho visto alcun riferimento, mi chiedevo se qualcuno potesse confermarlo e anche se ci fosse uno specifico strumento di documentazione.
pconcepcion,

1
Aggiungeranno sicuramente qualcosa in futuro, il // MARK:commento è previsto anche per una futura versione di Xcode.
Leandros,

Commenti in stile Doxygen, tipo di lavoro per metodi di classe, con ~ diversi ~ MOLTE avvertenze. Io per primo continuerò a usare lo stile Doxygen (come ho fatto per Obj-C) e spero che Xcode migliori il suo supporto per quelli.
Pascal,

1
Per la documentazione dei parametri dei blocchi, vedere stackoverflow.com/a/41970146/1054573
Leonard Pauli,

Risposte:


386

I commenti sulla documentazione sono supportati in modo nativo in Xcode, producendo una documentazione resa in modo intelligente in Guida rapida (sia nella popover quando si fa clic sui simboli, sia nella finestra di ispezione Guida rapida ⌥⌘2).

I commenti sulla documentazione dei simboli ora si basano sulla stessa sintassi Markdown utilizzata dai ricchi commenti sui campi da gioco, quindi molto di ciò che è possibile fare nei campi da gioco può ora essere utilizzato direttamente nella documentazione del codice sorgente.

Per i dettagli completi sulla sintassi, consultare Markup Formatting Reference . Si noti che ci sono alcune discrepanze tra la sintassi per i commenti sui giochi e la documentazione dei simboli; questi sono indicati nel documento (ad es. le virgolette di blocco possono essere utilizzate solo nei campi da gioco).

Di seguito è riportato un esempio e un elenco degli elementi di sintassi che attualmente funzionano per i commenti sulla documentazione dei simboli.


aggiornamenti

Xcode 7 beta 4 ~ " - Throws: ..." aggiunto come elemento di elenco di livello superiore che viene visualizzato accanto ai parametri e restituisce le descrizioni nella Guida rapida.

Xcode 7 beta 1 ~ Alcune modifiche significative alla sintassi con Swift 2 - commenti sulla documentazione ora basati su Markdown (lo stesso dei campi da gioco).

Xcode 6.3 (6D570) ~ Il testo con rientro è ora formattato come blocchi di codice, con i rientri successivi nidificati. Non sembra possibile lasciare una riga vuota in un tale blocco di codice - provando a farlo si ottiene che il testo venga incollato alla fine dell'ultima riga con qualsiasi carattere al suo interno.

Xcode 6.3 beta ~ Il codice incorporato può ora essere aggiunto ai commenti della documentazione usando i backtick.


Esempio per Swift 2

/// Text like this appears in "Description".
///
/// Leave a blank line to separate further text into paragraphs.
///
/// You can use bulleted lists (use `-`, `+` or `*`):
///
/// - Text can be _emphasised_
/// - Or **strong**
///
/// Or numbered lists:
///
/// 7. The numbers you use make no difference
/// 0. The list will still be ordered, starting from 1
/// 5. But be sensible and just use 1, 2, 3 etc…
///
/// ---
///
/// More Stuff
/// ==========
///
/// Code
/// ----
///
/// Use backticks for inline `code()`. Indentations of 4 spaces or more will create a code block, handy for example usage:
///
///     // Create an integer, and do nothing with it
///     let myInt = 42
///     doNothing(myInt)
///
///     // Also notice that code blocks scroll horizontally instead of wrapping.
///
/// Links & Images
/// --------------
///
/// Include [links](https://en.wikipedia.org/wiki/Hyperlink), and even images:
///
/// ![Swift Logo](/Users/Stuart/Downloads/swift.png "The logo for the Swift programming language")
///
/// - note: That "Note:" is written in bold.
/// - requires: A basic understanding of Markdown.
/// - seealso: `Error`, for a description of the errors that can be thrown.
///
/// - parameters:
///   - int: A pointless `Int` parameter.
///   - bool: This `Bool` isn't used, but its default value is `false` anyway…
/// - throws: A `BadLuck` error, if you're unlucky.
/// - returns: Nothing useful.
func doNothing(int: Int, bool: Bool = false) throws -> String {
    if unlucky { throw Error.BadLuck }
    return "Totally contrived."
}

Guida rapida alla documentazione di Swift


Sintassi per Swift 2 (basato su Markdown )


Stile di commento

Entrambi ///(in linea) e /** */commenti (blocco) di stile sono supportati per la produzione di commenti di documentazione. Mentre personalmente preferisco lo stile visivo dei /** */commenti, il rientro automatico di Xcode può rovinare la formattazione per questo stile di commento durante la copia / incolla in quanto rimuove i primi spazi bianchi. Per esempio:

/**
See sample usage:

    let x = method(blah)
*/

Quando si incolla, il rientro del blocco di codice viene rimosso e non viene più visualizzato come codice:

/**
See sample usage:

let x = method(blah)
*/

Per questo motivo, generalmente lo uso ///e lo userò per il resto degli esempi in questa risposta.


Block Elements

Intestazione:

/// # My Heading

o

/// My Heading
/// ==========


Sottotitolo:

/// ## My Subheading

o

/// My Subheading
/// -------------


Regola orizzontale:

/// ---


Elenchi non ordinati (puntati):

/// - An item
/// - Another item

Puoi anche usare +o *per elenchi non ordinati, deve solo essere coerente.


Elenchi ordinati (numerati):

/// 1. Item 1
/// 2. Item 2
/// 3. Item 3


Blocchi di codice:

///    for item in array {
///        print(item)
///    }

È richiesto un rientro di almeno quattro spazi.


Inline Elements

Enfasi (corsivo):

/// Add like *this*, or like _this_.


Forte (grassetto):

/// You can **really** make text __strong__.

Nota che non puoi mescolare asterischi ( *) e caratteri di sottolineatura ( _) sullo stesso elemento.


Codice incorporato:

/// Call `exampleMethod(_:)` to demonstrate inline code.


link:

/// [Link Text](https://en.wikipedia.org/wiki/Hyperlink)


Immagini:

/// ![Alt Text](http://www.example.com/alt-image.jpg)

L'URL può essere un URL Web (usando "http: //") o un URL percorso file assoluto (non riesco a far funzionare i percorsi file relativi).

Gli URL per collegamenti e immagini possono anche essere separati dall'elemento inline per mantenere tutti gli URL in un posto gestibile:

/// A [link][1] an an ![image][2]
///
/// ...
///
/// [1]: http://www.example.com
/// [2]: http://www.example.com/image.jpg


parole

Oltre alla formattazione Markdown, Xcode riconosce altre parole chiave di markup da mostrare in primo piano nella Guida rapida. Queste parole chiave di markup assumono principalmente il formato - <keyword>:(l'eccezione è parameter, che include anche il nome del parametro prima dei due punti), dove la parola chiave stessa può essere scritta con qualsiasi combinazione di caratteri maiuscoli / minuscoli.

Parole chiave della sezione simboli

Le seguenti parole chiave vengono visualizzate come sezioni prominenti nel visualizzatore della guida, sotto la sezione "Descrizione" e sopra la sezione "Dichiarato in". Se incluso, il loro ordine viene corretto come mostrato di seguito anche se puoi includerli nell'ordine che preferisci nei tuoi commenti.

Consulta l'elenco completo delle parole chiave della sezione e dei loro usi previsti nella sezione Comandi della sezione simboli del Riferimento per la formattazione del markup .

/// - parameters:
///   - <#parameter name#>:
///   - <#parameter name#>:
/// - throws:
/// - returns:

In alternativa, puoi scrivere ogni parametro in questo modo:

/// - parameter <#parameter name#>:

Simbolo Descrizione Parole chiave del campo

Il seguente elenco di parole chiave viene visualizzato come intestazioni in grassetto nel corpo della sezione "Descrizione" del visualizzatore della guida. Appariranno nell'ordine in cui li scrivi, come nel resto della sezione "Descrizione".

Elenco completo parafrasato da questo eccellente articolo di blog di Erica Sadun. Vedi anche l'elenco completo delle parole chiave e dei loro usi previsti nella sezione Comandi dei campi Descrizione simbolo del Riferimento per la formattazione del markup .

Attribuzioni:

/// - author:
/// - authors:
/// - copyright:
/// - date:

Disponibilità:

/// - since:
/// - version:

ammonizioni:

/// - attention:
/// - important:
/// - note:
/// - remark:
/// - warning:

Stato di sviluppo:

/// - bug:
/// - todo:
/// - experiment:

Qualità di attuazione:

/// - complexity:

Semantica funzionale:

/// - precondition:
/// - postcondition:
/// - requires:
/// - invariant:

Riferimento incrociato:

/// - seealso:

 Esportazione della documentazione

La documentazione HTML (progettata per imitare la documentazione di Apple) può essere generata dalla documentazione in linea utilizzando Jazzy , un'utilità da riga di comando open source.

$ [sudo] gem install jazzy
$ jazzy
Running xcodebuild
Parsing ...
building site
jam out ♪♫ to your fresh new docs in `docs`

Esempio di console tratto da questo articolo di NSHipster


1
Sembra che il comportamento sia cambiato nella versione finale di Xcode 6.3 (6D570). I blocchi rientrati sono ora formattati come blocchi di codice e possono essere nidificati con più di due livelli.
NexD.

2
Bella descrizione della sintassi della documentazione di Swift 2.0. È necessario aggiornare il post per includere il/// - todo: keyword
Leonardo

2
@uchuugaka In realtà no. Potrebbe essere stato precedentemente basato su reStructuredText, ma a partire da Xcode 7 i commenti sulla documentazione si basano su Markdown, con lo stesso formato di base dei commenti sul parco giochi. Vedi le note di rilascio di Xcode 7 per i dettagli.
Stuart,

2
C'è un modo per collegarsi ad altre funzioni nello stesso file, come fa JavaDoc? Ad esempio, "vedi myOtherMethod(param1:)per funzionalità estese"
Ben Leggiero

1
@BenLeggiero, sì, usando /// - Tag: otherMethode [otherMethod](x-source-tag://otherMethod). Per maggiori dettagli, vedi la mia risposta .
Clay Ellis

58

Ecco alcune cose che funzionano per documentare il codice rapido in Xcode 6. È molto difettoso e sensibile ai due punti, ma è meglio di niente:

class Foo {

    /// This method does things.
    /// Here are the steps you should follow to use this method
    ///
    /// 1. Prepare your thing
    /// 2. Tell all your friends about the thing.
    /// 3. Call this method to do the thing.
    ///
    /// Here are some bullet points to remember
    ///
    /// * Do it right
    /// * Do it now
    /// * Don't run with scissors (unless it's tuesday)
    ///
    /// :param: name The name of the thing you want to do
    /// :returns: a message telling you we did the thing
    func doThing(name : String) -> String {
        return "Did the \(name) thing";
    }
}

Quanto sopra viene visualizzato nella Guida rapida come ci si aspetterebbe con elenchi numerici formattati, punti elenco, parametri e documentazione del valore restituito.

Niente di tutto ciò è documentato: invia un radar per aiutarli.


2
Mattt Thompson ha scritto un articolo su questo , e pensa che lo sia reStructuredText.
Eonil,

Nell'esempio sopra, i simboli più (+) e meno (-) fungeranno anche da punti elenco, oltre agli asterischi mostrati.
Vince O'Sullivan,

Sembra che ///sia richiesta una riga di commento vuota ( ) tra qualsiasi testo esplicativo e le righe :param:o :returns:. Se si omette ciò, XCode (6.1.1 al momento della stesura) include la guida dei parametri nel corpo principale della descrizione della funzione.
Robin Macharg,

Purtroppo questo non funziona con Xcode 7 Beta. Speriamo che lo risolvano in una versione di rilascio.
stevo.mit,

1
Xcode 7 ha adottato una sintassi diversa: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey

41

Nuovo in Xcode 8 , puoi selezionare un metodo come questo

func foo(bar: Int) -> String { ... }

Quindi premi command+ option+/ o scegli "Struttura" - "Aggiungi documentazione" dal menu "Editor" di Xcode e genererà per te il seguente modello di commenti:

/// <#Description#>
///
/// - parameter bar: <#bar description#>
///
/// - returns: <#return value description#>

Grazie per questo. Dirò solo che la scorciatoia da tastiera che indichi non sembra funzionare su una tastiera danese, dove "/" è shift- "7".
RenniePet,

27

Swift include la gestione dei commenti "///" (sebbene probabilmente non tutto ancora).

Scrivi qualcosa come:

/// Hey!
func bof(a: Int) {

}

Quindi fai clic sull'opzione nome e voilà :)


11

Posso confermare che ShakenManChild ha fornito una soluzione peopr

Assicurati di avere una riga vuota sotto la descrizione!

Una situazione non valida

Modo corretto

Un altro modo

Un altro stile di commento


8

Sì. Base comune (ho creato frammenti per esso con equivalente Obj-C)

Objective-C:

/**
 @brief <#Short description - what it is doing#>

 @discussion <#Description#>

 @param  <#paramName#> <#Description#>.

 @return <#dataType#> <#Description#>.
 */

veloce

/**
<#Short inline description - what it is doing#>

<#Description#>

:param:  <#paramName#> <#Description#>.

:returns: <#dataType#> <#Description#>.
*/


6

Ho trovato qualcosa di interessante, scavando nel binario Xcode. File con il finale .swiftdoc. Ha sicuramente dei documenti, poiché questi file contengono i documenti per l'API Swift UIKit / Foundation, purtroppo sembra essere un formato di file proprietario, da usare nel visualizzatore di documentazione in Xcode.




-1

Forse è una buona idea avere un occhio su AppleDoc o proprio di Apple HeaderDoc che non è riconosciuto molto. Posso ancora trovare alcuni suggerimenti HeaderDoc nel terminale 10.9 Mavericks (headerdoc2html)

Consiglio di leggere l'ultimo " Novità in Xcode " * (non sono sicuro che sia ancora sotto NDA) * Il collegamento punta alla versione Xcode 5.1 che contiene anche informazioni su HeaderDoc.


-1

A partire da Xcode 5.0, sono supportati i commenti strutturati Doxygen e HeaderDoc.

fonte


1
Bene, stavo chiedendo di Swift in questo caso.
pconcepcion,

@pconcepcion Stai usando Swift in Xcode? Allora si.
Matt Zanchelli,

1
Matt, da quello che so (potrei sbagliarmi) Swift non è supportato fino a Xcode 6 beta, quindi non sono sicuro che la documentazione per Xcode 5 sia valida per Xcode 6 (e per allora Swift)
pconcepcion

@pconcepcion Funziona. Ho usato la stessa documentazione doxygen di stile di Objective-C e funziona. Sopra un metodo o una proprietà, io uso /// This is what the method does.ecc.
Matt Zanchelli,

Ok, allora il fatto è che l'hai testato su Xcode 6. Ero confuso perché stavi parlando di Xcode 5 e il link è per Xcode 5
pconcepcion
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.