Czy Swift obsługuje generowanie dokumentacji?

238

Wiele języków obsługuje komentarze do dokumentacji, aby umożliwić generatorowi (jak javadoclub doxygen ) wygenerowanie dokumentacji kodu przez parsowanie tego samego kodu.

Czy Swift ma taką funkcję komentowania dokumentacji typu?

pconcepcion
źródło
Wiedząc, że Xcode z celem-c pozwala na komentarze do dokumentacji, wierzę, że Apple szybko doda tę opcję do Xcode w najbliższej przyszłości (jest to jednak tylko przypuszczenie, nie mam dowodów)
Garoal
@ Δdeveloper Przypuszczam, że tak samo, ale ponieważ nie widziałem żadnego odniesienia, zastanawiałem się, czy ktoś może to potwierdzić, a także czy będzie jakieś konkretne narzędzie do dokumentacji.
pconcepcion
1
Na pewno coś dodadzą w przyszłości, // MARK:komentarz jest również zaplanowany dla przyszłej wersji Xcode.
Leandros,
Komentarze w stylu Doxygen to rodzaj pracy dla metod klasowych, z ~ kilkoma ~ DUŻO zastrzeżeń. Po pierwsze będę nadal używać stylu Doxygen (tak jak zrobiłem to dla Obj-C) i mam nadzieję, że Xcode poprawi jego obsługę.
Pascal
1
Aby udokumentować parametry bloku, patrz stackoverflow.com/a/41970146/1054573
Leonard Pauli

Odpowiedzi:

386

Komentarze do dokumentacji są obsługiwane natywnie w Xcode, tworząc inteligentnie renderowaną dokumentację w Szybkiej pomocy (zarówno w okienku podręcznym podczas klikania symboli, jak i w Inspektorze szybkiej pomocy ⌥⌘2).

Komentarze do dokumentacji symboli są teraz oparte na tej samej składni Markdown, co w przypadku bogatych komentarzy na placu zabaw, więc wiele z tego, co można zrobić na placach zabaw, można teraz wykorzystać bezpośrednio w dokumentacji kodu źródłowego.

Aby uzyskać szczegółowe informacje na temat składni, zobacz Dokumentacja formatowania znaczników . Zauważ, że istnieją pewne rozbieżności między składnią bogatych komentarzy na temat placu zabaw i dokumentacji symboli; zostały one wskazane w dokumencie (np. cytaty blokowe można stosować tylko na placach zabaw).

Poniżej znajduje się przykład i lista elementów składni, które obecnie działają w przypadku komentarzy do dokumentacji symboli.


Aktualizacje

Xcode 7 beta 4 ~ Dodano „ - Throws: ...” jako element listy najwyższego poziomu, który pojawia się obok parametrów i opisów zwrotów w Szybkiej pomocy.

Xcode 7 beta 1 ~ Kilka istotnych zmian w składni w Swift 2 - komentarze do dokumentacji oparte na Markdown (tak samo jak place zabaw).

Xcode 6.3 (6D570) ~ Wcięty tekst jest teraz formatowany jako bloki kodu, a kolejne wcięcia są zagnieżdżane. Wydaje się, że nie jest możliwe pozostawienie pustej linii w takim bloku kodu - próba zrobienia tego powoduje, że tekst jest sczepiany na końcu ostatniego wiersza z dowolnymi znakami.

Xcode 6.3 beta ~ Kod wbudowany można teraz dodawać do komentarzy do dokumentacji za pomocą odwrotnej strony.


Przykład dla 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."
}

Szybka dokumentacja Szybka pomoc


Składnia Swift 2 (na podstawie Markdown )


Styl komentarza

Zarówno ///(inline) i /** */komentarze (blok) style są obsługiwane wytwarzania komentarzy dokumentacji. Chociaż osobiście wolę wizualny styl /** */komentarzy, automatyczne wcięcie Xcode może zepsuć formatowanie tego stylu komentarzy podczas kopiowania / wklejania, ponieważ usuwa wiodące białe znaki. Na przykład:

/**
See sample usage:

    let x = method(blah)
*/

Podczas wklejania wcięcie bloku kodu jest usuwane i nie jest już renderowane jako kod:

/**
See sample usage:

let x = method(blah)
*/

Z tego powodu zazwyczaj używam ///i wykorzystam go do reszty przykładów w tej odpowiedzi.


Blokuj elementy

Nagłówek:

/// # My Heading

lub

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


Podtytuł:

/// ## My Subheading

lub

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


Linia pozioma:

/// ---


Listy nieuporządkowane (wypunktowane):

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

Możesz także użyć +lub w *przypadku nieuporządkowanych list, musi to być po prostu spójne.


Listy uporządkowane (numerowane):

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


Bloki kodu:

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

Wymagane jest wcięcie co najmniej czterech spacji.


Elementy wbudowane

Nacisk (kursywą):

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


Mocny (pogrubiony):

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

Pamiętaj, że nie można mieszać gwiazdek ( *) i znaków podkreślenia ( _) w tym samym elemencie.


Kod wewnętrzny:

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


Spinki do mankietów:

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


Zdjęcia:

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

Adres URL może być adresem URL w sieci (używając „http: //”) lub bezwzględnym adresem URL ścieżki do pliku (nie mogę uzyskać względnych ścieżek do plików).

Adresy URL linków i obrazów można również oddzielić od elementu wbudowanego, aby wszystkie adresy URL znajdowały się w jednym, zarządzalnym miejscu:

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


Słowa kluczowe

Oprócz formatowania Markdown Xcode rozpoznaje inne słowa kluczowe znaczników, które są widoczne w Szybkiej pomocy. Te słowa kluczowe znaczników najczęściej przyjmują format - <keyword>:(wyjątek to parameter, który obejmuje także nazwę parametru przed dwukropkiem), w którym samo słowo kluczowe można zapisać dowolną kombinacją wielkich / małych liter.

Słowa kluczowe sekcji symboli

Następujące słowa kluczowe są wyświetlane jako widoczne sekcje w przeglądarce pomocy, poniżej sekcji „Opis” i powyżej sekcji „Zadeklarowane w”. Po uwzględnieniu ich kolejność jest ustalona, ​​jak pokazano poniżej, nawet jeśli możesz uwzględnić je w dowolnej kolejności w komentarzach.

Zobacz w pełni udokumentowaną listę słów kluczowych sekcji i ich zamierzone zastosowania w sekcji Polecenia sekcji symboli w Odwołaniu do formatowania znaczników .

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

Alternatywnie możesz zapisać każdy parametr w ten sposób:

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

Symbol Opis Słowa kluczowe w polu

Poniższa lista słów kluczowych jest wyświetlana jako pogrubione nagłówki w treści sekcji „Opis” przeglądarki pomocy. Pojawią się w dowolnej kolejności, w jakiej je napiszesz, podobnie jak w pozostałej części sekcji „Opis”.

Pełna lista parafrazowana z tego doskonałego artykułu na blogu autorstwa Erici Sadun. Zobacz także w pełni udokumentowaną listę słów kluczowych i ich zamierzone zastosowanie w sekcji Polecenia pola opisu symbolu w Odniesieniu do formatowania znaczników .

Atrybucje:

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

Dostępność:

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

Upomnienia:

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

Stan rozwoju:

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

Cechy realizacji:

/// - complexity:

Semantyka funkcjonalna:

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

Odsyłacz:

/// - seealso:

 Eksportowanie dokumentacji

Dokumentację HTML (zaprojektowaną tak, by naśladować własną dokumentację Apple) można wygenerować z dokumentacji wbudowanej za pomocą narzędzia wiersza polecenia Jazzy .

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

Przykład konsoli wzięty z tego artykułu NSHipster

Stuart
źródło
1
Wygląda na to, że zachowanie zmieniło się w ostatecznej wersji Xcode 6.3 (6D570). Wcięte bloki są teraz formatowane jako bloki kodu i mogą być zagnieżdżane na więcej niż dwóch poziomach.
NexD.
2
Bardzo ładny opis składni dokumentacji Swift 2.0. Powinieneś zaktualizować wpis, aby zawierał/// - todo: keyword
Leonardo
2
@uchuugaka Właściwie nie. Być może poprzednio był oparty na reStructuredText, ale od Xcode 7 komentarze do dokumentacji oparte są na Markdown, w tym samym podstawowym formacie co komentarze na placu zabaw. Szczegółowe informacje można znaleźć w Uwagach do wydania Xcode 7 .
Stuart,
2
Czy istnieje sposób na link do innych funkcji w tym samym pliku, tak jak robi to JavaDoc? Na przykład „zobacz myOtherMethod(param1:)rozszerzoną funkcjonalność”
Ben Leggiero
1
@BenLeggiero, tak, używając /// - Tag: otherMethodi [otherMethod](x-source-tag://otherMethod). Aby uzyskać więcej informacji, zobacz moją odpowiedź .
Clay Ellis
58

Oto kilka rzeczy, które działają w celu dokumentowania szybkiego kodu w Xcode 6. Jest bardzo błędny i wrażliwy na dwukropki, ale jest lepszy niż nic:

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";
    }
}

Powyższe jest renderowane w Szybkiej pomocy, tak jak można się spodziewać po sformatowanych listach numerycznych, punktorach, dokumentacji parametrów i wartości zwracanej.

Nic z tego nie jest udokumentowane - zgłoś radar, aby im pomóc.

ShakenManChild
źródło
2
Mattt Thompson napisał o tym artykuł , i uważa, że ​​tak reStructuredText.
Eonil
W powyższym przykładzie symbole plus (+) i minus (-) będą również działały jako punktory, oprócz pokazanych gwiazdek.
Vince O'Sullivan
Wydaje się, że ///pomiędzy dowolnym tekstem objaśniającym a wierszami :param:lub wymagana jest pusta linia komentarza ( ) :returns:. Pominięcie tego powoduje, że XCode (6.1.1 w momencie pisania) dołącza pomoc dotyczącą parametru do głównej części opisu funkcji.
Robin Macharg,
Niestety nie działa to z Xcode 7 Beta. Mamy nadzieję, że naprawią to w wersji wydanej.
stevo.mit
1
Xcode 7 przyjął inną składnię: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey,
41

Nowość w Xcode 8 , możesz wybrać taką metodę

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

Następnie naciśnij command+ option+/ lub wybierz „Struktura” - „Dodaj dokumentację” z menu „Edytora” Xcode, a wygeneruje dla ciebie następujący szablon komentarzy:

/// <#Description#>
///
/// - parameter bar: <#bar description#>
///
/// - returns: <#return value description#>
Logan Jahnke
źródło
Dzięki za to. Wspomnę tylko, że wskazany skrót klawiaturowy nie działa na duńskiej klawiaturze, gdzie „/” to shift - „7”.
RenniePet
27

Swift zawiera obsługę komentarzy „///” (choć prawdopodobnie jeszcze nie wszystko).

Napisz coś takiego:

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

}

Następnie kliknij opcję func i voilà :)

Jean Le Moignan
źródło
11

Mogę potwierdzić, że ShakenManChild dostarczył rozwiązanie peopr

Tylko upewnij się, że masz pusty wiersz pod opisem!

Niepoprawna sytuacja

Właściwy sposób

Inny sposób

Kolejny styl komentowania

DAH
źródło
8

Tak. Podstawowy wspólny (zrobiłem dla niego fragmenty z odpowiednikiem Obj-C)

Cel C:

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

 @discussion <#Description#>

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

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

Szybki

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

<#Description#>

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

:returns: <#dataType#> <#Description#>.
*/
Jakub Truhlář
źródło
6

Znalazłem coś interesującego, kopiąc w pliku binarnym Xcode. Pliki z zakończeniem .swiftdoc. Zdecydowanie ma dokumenty, ponieważ pliki te zawierają dokumenty dla interfejsu API Swift UIKit / Foundation API, niestety wydaje się, że jest to zastrzeżony format pliku, do użytku w przeglądarce dokumentacji w Xcode.

Leandros
źródło
5

W Xcode Editor -> Struktura -> Dodaj dokumentację.

wprowadź opis zdjęcia tutaj

Abo3atef
źródło
Tak, wspomniał o tym ponad 3 miesiące temu Logan Jahnke .
Franklin Yu
-1

Może warto mieć oko na AppleDoc lub własny HeaderDoc firmy Apple, który nie jest bardzo rozpoznawany. Nadal mogę znaleźć wskazówki HeaderDoc w terminalu 10.9 Mavericks (headerdoc2html)

Polecam przeczytać najnowszą wersję „ Co nowego w Xcode ” * (nie jestem pewien, czy nadal jest objęty NDA) * Link wskazuje na wersję Xcode 5.1, która zawiera także informacje o HeaderDoc.

TiBooX
źródło
-1

Począwszy od Xcode 5.0 obsługiwane są komentarze strukturalne Doxygen i HeaderDoc.

Źródło

Matt Zanchelli
źródło
1
W tym przypadku pytałem o Swift.
pconcepcion
@pconcepcion Czy używasz Swift w Xcode? W takim razie tak.
Matt Zanchelli,
1
Matt, z tego co wiem (mogę się mylić) Swift nie jest obsługiwany aż do Xcode 6 beta, więc nie jestem pewien, czy dokumentacja dla Xcode 5 jest ważna dla Xcode 6 (a potem Swift)
pconcepcion
@pconcepcion To działa. Korzystam z dokumentacji doksygenowej w tym samym stylu, co w Objective-C i działa. Powyżej metody lub właściwości używam /// This is what the method does.itp.
Matt Zanchelli
Ok, chodzi o to, że przetestowałeś go na Xcode 6. Byłem zdezorientowany, ponieważ mówiłeś o Xcode 5, a link jest do Xcode 5
pconcepcion