6

我需要解析一些 Objective-C 头文件。

  • 我已经尝试使用Doxygen和解析 XML 输出,但它不完全支持没有注释的 Objective C 标头(它阻塞了属性中定义的宏,检查Doxygen 没有正确识别属性
  • 我也尝试过使用appledoc,但是 XML 输出不够完整(例如,没有类的继承信息),并且在属性上的宏也有同样的问题。
  • 我还尝试解析库 Objective C 元数据的输出(使用otool),但注意到元数据不会保留方法上的类型(所以你得到method:(id)param:(id)

有谁知道一个很好的工具来做我想做的事?我怀疑clang会帮助我,但到目前为止-ast-dump,类似的选项只是试图为我没有的源(只有标题)生成一个 AST。

4

2 回答 2

15

您也许可以使用 libclang。libclang 是一个编程接口,旨在实现语法高亮和代码完成等工具。

clang -ast-dump为我工作。(请注意,-ast-dump驱动程序不支持,因此您必须做一些额外的工作来传递驱动程序通常处理的标志。您可以使用它clang -### ...来查看驱动程序正在做什么。)

% clang -cc1 -ast-dump -fblocks -x objective-c /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h
[...]
|-ObjCInterfaceDecl 0x1023727c0 <line:50:1, line:96:2> NSObject
| |-ObjCProtocol 0x102371350 'NSObject'
[...]
于 2013-07-11T03:31:03.663 回答
-6

我认为使用 clang 听起来太难了。我只会使用正则表达式。

相反,我会围绕 Doxygen 编写一个简单的 shell 脚本包装器,用于注释掉有问题的语法。

改变应该很简单:

@property(nonatomic, retain) BOOL myProperty NS_AVAILABLE_IOS(3_2);

至:

@property(nonatomic, retain) BOOL myProperty /*NS_AVAILABLE_IOS(3_2)*/;

您甚至可以将内容转换NS_DEPRECATED()@deprecated评论。

于 2013-07-11T01:12:50.340 回答