<div><div>Hello!</div><div>When I write standalone tool based on ClangTool I ususally use CommonOptionsParser.</div><div>CommonOptionParser provides option --extra-arg-before=<string> that allow me to pass include directories to my clang-based tool.</div><div>For example: ./tool --extra-arg-before='/home/user/llvm_9/llvm_9-build/lib/clang/9.0.0/include -p /my/build/path /path/to/source.cpp. This invocation allow me to avoid preprocessor errors/</div><div> </div><div>In general, my question is</div><div>how can I match AST nodes in A) source code in StringRef</div><div>B) source code in file</div><div>without run ClangTool instance?</div><div>The problem  is that I need include header files in source files for analysis.</div><div><div> </div><div>For example code:</div><div> </div><div>#define SOME_CODE R"(\</div><div>#include <stdio.h> \</div><div>...\</div><div>...\</div><div>);</div><div> </div><div>auto M = compoundStmt(hasAncestor(functionDecl(hasName(fooName1)))).bind("bindStr")</div><div>std::unique_ptr<ASTUnit> Unit = buildASTFromCode(SOME_CODE , "pseudoFile.cpp")</div><div>auto MatchRes = match(M , Unit->getASTContext());</div><div>Node *Result = const_cast<Node *>(MatchRes[0].template getNodeAs<Node>("bindStr"));</div></div><div> </div><div>So, when I write #include <stdio.h> in src file and run this non-ClangTool-based matcher this leads to errors:</div><div>/usr/include/stdio.h</div><div> </div><div><div>In file included from pseudoFile.cpp:2:</div><div>/usr/include/stdio.h:33:10: fatal error: 'stddef.h' file not found</div><div>#include <stddef.h></div><div>^~~~~~~~~~</div><div> </div></div><div>How can we pass some extra args (same as CommonOptionsParser in ClangTool-based tool)?</div><div>Maybe the solution is to use buildASTFromCodeWithArgs or passing compile database entry for this source file then calling match method?</div><div> </div><div>Thanks.</div></div>