Как прокомментировать расширение блока Apple для Doxygen? - PullRequest
4 голосов
/ 12 октября 2010

Doxygen объявил в своем списке изменений для версии 1.7.2 для поддержки расширения блока Apple .Интересно, каков синтаксис для генерации документации?Я не смог найти ни одной подсказки - также нет в конфигурационном файле doxygen (версия 1.7.2).
Обновление: Версия 1.7.5 была выпущена 14 августа 2011 года. Тем не менее, я не узналкак написать документацию для блоков Apple.

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Глядя на разницу между 1.7.1 и 1.7.2, я полагаю, что под этой строкой подразумевается, что сканер Doxygen обновлен для поддержки синтаксиса блоков Apple при распознавании typedefs для типов блоков. Например, вы можете задокументировать указатель функции typedef следующим образом:

///
/// This is a typedef for a function pointer type. 
/// It takes an NSUInteger parameter, an id adopting protocol Foo, and has no return value.
/// 
typedef void (*MyFunctionPtrType)(NSUInteger p1, id<Foo> p2);

и получите вывод, подобный этому:

Doxygen output for function pointer typedef

Изменения в их сканере, кажется, добавляют поддержку для typedefs блока как это:

///
/// This is a typedef for a block type. 
/// It takes an NSUInteger parameter, an id adopting protocol Foo, and has no return value.
/// 
typedef void (^MyBlockType)(NSUInteger p1, id<Foo> p2);

И действительно, с недавней версией Doxygen, которая выдает такой результат:

Doxygen output for block typedef

Вы можете задокументировать глобальные переменные типов блоков, но их поведение несколько сложнее. Например, с этим:

///
/// This is a global variable of type MyBlockType. It logs the parameters to the console.
///
MyBlockType myGlobalBlock = ^(NSUInteger p1, id<Foo> p2){

    /**
     * This is a block comment inside my block, which would get 
     * concatted into the "in body" description if this were a function.
     * but won't be because this is a block.
     */
    NSLog(@"p1: %lu p2: %@", p1, p2);
};

///
/// This is the definition for the function MyFunction
/// 
void MyFunction(NSUInteger p1, id<Foo> p2)
{
    /**
     * This is a block comment inside my function, which will get 
     * concatted into the "in body" description.
     */

    NSLog(@"p1: %lu p2: %@", p1, p2);
}

Я получаю этот вывод, что-то вроде, не то, что я хочу:

Doxygen output for global block typed variable compared to a function

К счастью, я подозреваю, что глобальные переменные типов блоков не так уж часто встречаются на практике, поэтому тот факт, что Doxygen не очень хорош в их обработке, не так уж сложен. Кажется, нет никаких доказательств какой-либо дополнительной поддержки блоков в diff.

0 голосов
/ 21 февраля 2015

Я не знаю Obj-C, но вот как пометить источник для создания этого вывода для случая, когда блок типа не является членом интерфейса. Используйте тег @related с именем связанного интерфейса в качестве цели:

/**
 * @related MyService
 *
 * The completion handler invoked when `unsubscribe` returns.
 */
typedef void(^MyServiceUnsubscribeCompletion)(NSError *error);


@interface MyService : NSObject
...
@end

Сам Дмитрий поставил решение: https://bugzilla.gnome.org/show_bug.cgi?id=720046

...