Как прокомментировать расширение блока Apple для Doxygen?

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


person JJD    schedule 12.10.2010    source источник


Ответы (2)


Глядя на разницу между 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 для typedef указателя функции

Похоже, что изменения в их сканере добавляют поддержку блочных типов, например:

///
/// 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 для определения типа блока

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

///
/// 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 для глобальной блочной переменной по сравнению с функцией

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

person ipmcc    schedule 23.12.2011

Я не знаком с 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

person dougkramer    schedule 21.02.2015