Как создать инструмент поиска совпадений только для синтаксиса? - PullRequest
0 голосов
/ 29 сентября 2018

Я создаю инструмент на основе 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 для соблюдения синтаксисатолько поведение?

...