Есть ли у Swift поддержка генерации документации?


238

Многие языки поддерживают комментарии к документации, чтобы генератор (например, javadocили doxygen ) мог генерировать документацию кода, анализируя тот же код.

Есть ли у Swift какая-либо функция комментариев к документации типа?


Зная, что Xcode с target-c позволяет комментировать документацию, я думаю, что Apple добавит эту опцию в Xcode с быстрым обновлением в ближайшем будущем (однако, это всего лишь предположение, у меня нет доказательств)
Garoal

@ Δdeveloper Я предполагал то же самое, но, поскольку я не видел никаких ссылок, мне было интересно, сможет ли кто-нибудь это подтвердить, а также будет ли какой-либо конкретный инструмент документации.
pcecepcion

1
Они определенно добавят что-то в будущем, // MARK:комментарий также запланирован для будущей версии Xcode.
Леандрос

Комментарии в стиле Doxygen - своего рода работа для методов класса, с ~ ~ ~ ОЧЕНЬ большим количеством предостережений. Я, например, просто буду продолжать использовать стиль Doxygen (как я это делал для Obj-C) и надеюсь, что Xcode улучшит его поддержку.
Паскаль

1
Для документирования параметров блока, см. Stackoverflow.com/a/41970146/1054573
Леонард Паули

Ответы:


386

Комментарии к документации изначально поддерживаются в XCode, создавая грамотно оформленную документацию в быстрой справке (как в всплывающем окне при нажатии символов, так и в инспекторе быстрой справки ⌥⌘2).

Комментарии к символьной документации теперь основаны на том же синтаксисе Markdown, который используется в богатых комментариях к игровым площадкам, поэтому многое из того, что вы можете делать на игровых площадках, теперь можно использовать непосредственно в документации по исходному коду.

Для получения полной информации о синтаксисе см. Справочник по форматированию разметки . Обратите внимание, что есть некоторые несоответствия между синтаксисом для богатых комментариев к игровой площадке и документации символов; они указаны в документе (например, кавычки могут использоваться только на игровых площадках).

Ниже приведен пример и список элементов синтаксиса, которые в настоящее время работают для комментариев документации по символам.


Обновления

Xcode 7 beta 4 ~ Добавлено " - Throws: ..." как элемент списка верхнего уровня, который отображается рядом с параметрами и возвращает описания в быстрой справке.

Xcode 7 beta 1 ~ Некоторые существенные изменения в синтаксисе со Swift 2 - комментарии к документации теперь основаны на Markdown (аналогично игровым площадкам).

Xcode 6.3 (6D570) ~ Текст с отступом теперь отформатирован как блоки кода с последующими вложенными отступами. Кажется невозможным оставить пустую строку в таком блоке кода - попытка сделать это приводит к тому, что текст будет добавлен в конец последней строки с любыми символами в нем.

Xcode 6.3 beta ~ Встроенный код теперь может быть добавлен в комментарии к документации с помощью обратных галочек.


Пример для 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."
}

Быстрая справка Swift Documentation


Синтаксис для Swift 2 (на основе уценки )


Стиль комментариев

Оба ///(встроенный) и /** */(блочный) стиль комментариев поддерживаются для создания комментариев документации. Хотя я лично предпочитаю визуальный стиль /** */комментариев, автоматическое отступление XCode может испортить форматирование для этого стиля комментариев при копировании / вставке, поскольку оно удаляет начальные пробелы. Например:

/**
See sample usage:

    let x = method(blah)
*/

При вставке отступ блока кода удаляется и больше не отображается как код:

/**
See sample usage:

let x = method(blah)
*/

По этой причине я обычно использую ///и буду использовать это для остальных примеров в этом ответе.


Блочные элементы

Заголовок:

/// # My Heading

или

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


Подрубрика:

/// ## My Subheading

или

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


Горизонтальное правило:

/// ---


Неупорядоченные (маркированные) списки:

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

Вы также можете использовать +или *для неупорядоченных списков, это просто должно быть последовательным.


Упорядоченные (пронумерованные) списки:

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


Блоки кода:

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

Требуется отступ не менее четырех пробелов.


Встроенные элементы

Акцент (курсив):

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


Сильный (жирный):

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

Обратите внимание, что вы не можете смешивать звездочки ( *) и подчеркивание ( _) в одном элементе.


Встроенный код:

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


Ссылки:

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


Изображений:

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

URL-адрес может быть либо веб-URL-адресом (с использованием «http: //»), либо URL-адресом абсолютного пути к файлу (кажется, я не могу заставить работать относительные пути к файлам).

URL-адреса для ссылок и изображений также можно отделить от встроенного элемента, чтобы сохранить все URL-адреса в одном управляемом месте:

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


Ключевые слова

В дополнение к форматированию Markdown, XCode распознает другие ключевые слова разметки, которые отображаются на видном месте в быстрой справке. Эти ключевые слова разметки в основном принимают формат - <keyword>:(за исключением того parameter, что также включает имя параметра перед двоеточием), где само ключевое слово может быть написано с любой комбинацией символов верхнего и нижнего регистра.

Ключевые слова раздела символов

Следующие ключевые слова отображаются в виде заметных разделов в средстве просмотра справки, под разделом «Описание» и над разделом «Объявлено». Когда они включены, их порядок фиксируется, как показано ниже, даже если вы можете включить их в любом порядке, который вам нравится в ваших комментариях.

См. Полностью документированный список ключевых слов раздела и их предполагаемое использование в разделе «Команды раздела символов» справочника по форматированию разметки .

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

Кроме того, вы можете написать каждый параметр следующим образом:

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

Символ Описание Ключевые слова поля

Следующий список ключевых слов отображается в виде жирных заголовков в теле раздела «Описание» средства просмотра справки. Они будут отображаться в любом порядке, в котором вы их пишете, как и в остальной части раздела «Описание».

Полный список перефразирован из этой замечательной статьи Эрики Садун. Также см. Полностью документированный список ключевых слов и их предполагаемое использование в разделе «Команды поля описания символа» в справочнике по форматированию разметки .

атрибуции:

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

Доступность:

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

Наставления:

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

Состояние развития:

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

Качество реализации:

/// - complexity:

Функциональная семантика:

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

Перекрестная ссылка:

/// - seealso:

 Экспорт документации

HTML-документация (предназначенная для имитации собственной документации Apple) может быть сгенерирована из встроенной документации с использованием утилиты командной строки с открытым исходным кодом Jazzy .

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

Пример консоли, взятый из этой статьи NSHipster


1
Похоже, поведение изменилось в финальной версии Xcode 6.3 (6D570). Отступные блоки теперь отформатированы как блоки кода и могут быть вложены более чем в два уровня.
NexD.

2
Очень хорошее описание синтаксиса документации Swift 2.0. Вы должны обновить сообщение, чтобы включить/// - todo: keyword
Леонардо

2
@uchuugaka На самом деле нет. Возможно, он ранее был основан на reStructuredText, но на момент написания комментариев к документации Xcode 7 был основан на Markdown, с тем же базовым форматом, что и комментарии к игровым площадкам. См. Примечания к выпуску Xcode 7 для деталей.
Стюарт

2
Есть ли способ связать другие функции в том же файле, как это делает JavaDoc? Например, «см. myOtherMethod(param1:)Для расширенной функциональности»
Бен Leggiero

1
@BenLeggiero, да, используя /// - Tag: otherMethodи [otherMethod](x-source-tag://otherMethod). Для более подробной информации, смотрите мой ответ .
Клэй Эллис

58

Вот некоторые вещи, которые работают для документирования быстрого кода в Xcode 6. Он очень глючит и чувствителен к двоеточиям, но лучше, чем ничего:

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

Выше приведено в быстрой справке, как и следовало ожидать с отформатированными числовыми списками, маркерами, документацией параметров и возвращаемых значений.

Ничего из этого не задокументировано - подайте радар, чтобы помочь им в этом.


2
Мэтт Томпсон написал статью об этом , и он думает, что это так reStructuredText.
Эонил

В приведенном выше примере символы «плюс» (+) и «минус» (-) также будут использоваться в качестве маркеров, в дополнение к показанным звездочкам.
Винс О'Салливан

Кажется, что ///между любым пояснительным текстом и строками :param:или должна быть пустая строка комментария ( ) :returns:. Отказ от этого заставляет XCode (6.1.1 на момент написания) включить справку по параметру в основную часть описания функции.
Робин Мачарг,

К сожалению, это не работает с Xcode 7 Beta. Надеюсь, они исправят это в версии выпуска.
stevo.mit

1
Xcode 7 принял другой синтаксис: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey

41

Новое в Xcode 8 , вы можете выбрать такой метод

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

Затем нажмите command+ option+/ или выберите «Структура» - «Добавить документацию» из меню «Редактор» Xcode, и он сгенерирует для вас следующий шаблон комментариев:

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

Спасибо за это. Я просто упомяну, что указанное вами сочетание клавиш не работает на датской клавиатуре, где «/» означает shift - «7».
RenniePet

27

Swift включает обработку комментариев "///" (хотя, вероятно, еще не все).

Напишите что-то вроде:

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

}

Затем кликните на название функции и вуаля :)


11

Я могу подтвердить, что ShakenManChild предоставил Peopr решение

Просто убедитесь, что у вас есть пустая строка под описанием!

Неверная ситуация

Правильный путь

По-другому

Еще один стиль комментирования


8

Да. Базовая база (я сделал для нее фрагменты с эквивалентом Obj-C)

Objective-C:

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

 @discussion <#Description#>

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

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

стриж

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

<#Description#>

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

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


6

Я нашел что-то интересное, копаясь в двоичном коде Xcode. Файлы с окончанием .swiftdoc. У него определенно есть документы, потому что эти файлы содержат документы для Swift UIKit / Foundation API, к сожалению, это, кажется, проприетарный формат файла, для использования в средстве просмотра документации в Xcode.




-1

Может быть, это хорошая идея, чтобы взглянуть на AppleDoc или собственный Apple HeaderDoc, который не очень известен. Я все еще могу найти некоторые подсказки HeaderDoc в терминале 10.9 Mavericks (headerdoc2html)

Рекомендую прочитать последнюю версию Что нового в Xcode » * (не уверен, что он все еще под NDA) * Ссылка указывает на версию Xcode 5.1, которая также содержит информацию о HeaderDoc.


-1

Начиная с Xcode 5.0, поддерживаются структурированные комментарии Doxygen и HeaderDoc.

Источник


1
Ну, я спрашивал о Свифте в этом случае.
pcecepcion

@pconcepcion Вы используете Swift в Xcode? Тогда да.
Мэтт Занчелли

1
Мэтт, насколько я знаю (я могу ошибаться), Swift не поддерживается до бета-версии Xcode 6, поэтому я не уверен, что документация для Xcode 5 действительна для Xcode 6 (и для Swift)
pconcepcion

@pconcepcion Это работает. Я использовал документацию по тому же стилю, что и в Objective-C, и она работает. Над методом или свойством я использую /// This is what the method does.и т. Д.
Мэтт Занчелли,

Хорошо, тогда дело в том, что вы проверили его на Xcode 6. Я был сбит с толку, потому что вы говорили о Xcode 5, а ссылка для Xcode 5
pconcepcion
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.