Я создаю инструмент на основе ASTMatcher, который я хотел бы использовать для своих источников:
int main(int argc, const char** argv) {
CommonOptionsParser OptionsParser(argc, argv, MyToolCategory);
ClangTool Tool(OptionsParser.getCompilations(),
OptionsParser.getSourcePathList());
MatchFinder Finder;
// Repeated calls to Finder.addMatcher(...);
Tool.run(newFrontendActionFactory(&Finder).get());
// Handle the results of the matching.
}
Запуск этого файла для исходного файла, который зависит от других заголовков, приводит к следующей ошибке:
~$ /path/to/my/tool /path/to/my/file.cpp --
/path/to/my/file.cpp:8:10: fatal error: 'string' file not found
#include <string>
^~~~~~~~
1 error generated.
Error while processing /path/to/my/file.cpp.
Я не хочу включать какие-либо другие заголовки в эту обработку, чтобы мои сопоставители не находили содержимое в тех заголовках, которые я не хочу обрабатывать.
Я попытался передать -fsyntax_only
в инструмент,но я получаю тот же результат, что и выше:
~$ /path/to/my/tool /path/to/my/file.cpp -- -fsyntax-only
Я заметил в уроке ASTMatcher , что существует clang::SyntaxOnlyAction
.Однако я не смог понять, как MatchFinder
и SyntaxOnlyAction
могут использоваться вместе друг с другом.Кроме того, я смог сделать дамп AST из командной строки того же файла, без проблем, поэтому я знаю, что это возможно.
Можно ли настроить инструмент на основе MatchFinder для соблюдения синтаксисатолько поведение?