在不解决依赖关系的情况下获取Objective-C类的AST节点

时间:2019-03-07 18:28:46

标签: objective-c clang llvm-clang automated-refactoring libtooling

我正在尝试创建一个重构工具,该工具将允许我从Objective-C类中获取语法树,以便可以更改类的结构并输出与我的条件匹配的其他版本。我正在查看Clang的Libtooling生成AST,然后从那里获取它,我遇到的问题是我需要以某种方式确保为从该源导入的所有可能的标头提供所有路径,这就是我想避免。

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

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

1 个答案:

答案 0 :(得分:0)

在进行了更多研究之后,我对以下想法有所了解:我尝试做的事情甚至不可能成为基于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