Как правильно сопоставить #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, но я не совсем нашел то, что искал.