Как правильно сопоставить #include (или #defines) с помощью libtooling Clang?

Я пишу инструмент рефакторинга libtooling. У меня есть класс, скажемFooопределяется в заголовкеfoo.h, Я хочу увидеть, еслиfoo.h включен в файл. В настоящее время, чтобы проверить, еслиbar.cc включает в себяfoo.hЯ просто соответствую, используяrecordDecl(hasName("Foo")), Это работает, потому чтоclass Foo { ... }; будет существовать внутриbar.ccАСТ после предварительной обработки, еслиbar.cc включает в себяfoo.h.

Но это не работает, если, например,bar.cc включает в себяcat.h который включает в себяfoo.h, я хочуbar.cc ТОЧНО включатьfoo.h.

Кроме того, я хотел бы иметь возможность соответствовать#define макросы.

То, как я писал свой инструмент, сделало эти две цели невозможными, потому что AST, с которым я сопоставляюсь, уже был предварительно обработан. Возможно ли то, что я пытаюсь сделать? Я покопалсяPreprocessor ссылка на класс на страницах Кланга о Doxygen, но я не совсем нашел то, что искал.

Ответы на вопрос(2)

Ваш ответ на вопрос