在不解析依赖项的情况下获取 objective-C class 的 AST 节点

Get AST Nodes of objective-C class without resolving dependencies

我正在尝试创建一个重构工具,它允许我从 objective-c class 中获取语法树,以便我可以更改 class 的结构和输出符合我标准的不同版本。我正在查看 Clang 的 Libtooling 以生成一个 AST,然后从那里获取它,我遇到的问题是我需要以某种方式确保我提供从该源导入的所有可能 headers 的所有路径,这是我想避免的事情。

我想知道是否有一种方法可以为 class 生成 AST,而不必例如为包含 class 属性定义的框架提供路径 class 我想重构持有。

理想情况下,我将能够在我的源文件的原始文本中获取包含属性、函数等内容的节点...这样我就能够遍历该树并更改其结构以便稍后重新生成我的来源以所需的方式。

在进行更多研究后,我发现我尝试做的事情甚至不可能作为基于 LibTooling 的工具 need syntactic and semantic information about a program。此信息可以通过 compile_commands.json 文件提供,如文档中所述:

Clang Tooling needs a compilation database to figure out specific build options for each file. Currently it can create a compilation database from the compile_commands.json file

对于Xcode个项目,这个文件可以这样生成:

xcodebuild -project PROJECT_NAME.xcodeproj | xcpretty -r json-compilation-database --output compile_commands.json

您将需要安装 xcpretty gem。 (gem install xcpretty)

来源:https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html