我正在编写一个 libtooling 重构工具。我有一个类,比方说Foo,定义在一个名为foo.h. 我想看看是否foo.h包含在文件中。目前,要检查是否bar.cc包含foo.h,我只是使用recordDecl(hasName("Foo")). 这是有效的,因为在预处理class Foo { ... };后将存在于bar.cc的 AST 中,如果bar.cc包括foo.h.
bar.cc但是,例如,如果包含cat.hwhich includes ,这将不起作用foo.h。我想bar.cc明确包括foo.h.
此外,我希望能够匹配#define宏。
我编写工具的方式使这两个目标成为不可能,因为我匹配的 AST 已经过预处理。我想要做的甚至可能吗?我Preprocessor在 Clang 的 Doxygen 页面上搜索了类参考,但我还没有完全找到我要找的东西。