Doxygen объявил в своем журнале изменений для версии 1.7.2 о поддержке блочного расширения Apple. Интересно, какой синтаксис для создания документации. Никакой подсказки я не нашел - в конфигурационном файле doxygen (версия 1.7.2) тоже нет.
Обновление: Версия 1.7.5 вышла 14 августа 2011. До сих пор не нашел как написать документацию для блоков Apple.
Как прокомментировать расширение блока Apple для Doxygen?
Ответы (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);
и получить вывод следующим образом:
Похоже, что изменения в их сканере добавляют поддержку блочных типов, например:
///
/// 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 это выводит примерно так:
Вы можете документировать глобальные переменные блочных типов, но поведение немного шаткое. Например, с этим:
///
/// 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 не очень хорошо с ними справляется, не имеет большого значения. Кажется, нет никаких доказательств какой-либо дополнительной поддержки блоков в diff.
Я не знаком с 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