36 #include "clang/ASTMatchers/ASTMatchFinder.h" 37 #include "clang/ASTMatchers/ASTMatchers.h" 38 #include "clang/Basic/SourceManager.h" 39 #include "clang/Frontend/FrontendActions.h" 40 #include "clang/Lex/Lexer.h" 41 #include "clang/Tooling/CommonOptionsParser.h" 42 #include "clang/Tooling/Execution.h" 43 #include "clang/Tooling/Refactoring.h" 44 #include "clang/Tooling/Refactoring/AtomicChange.h" 45 #include "clang/Tooling/Tooling.h" 46 #include "llvm/Support/CommandLine.h" 47 #include "llvm/Support/MemoryBuffer.h" 48 #include "llvm/Support/Signals.h" 50 using namespace clang;
56 class ToolTemplateCallback :
public MatchFinder::MatchCallback {
58 ToolTemplateCallback(ExecutionContext &Context) : Context(Context) {}
60 void run(
const MatchFinder::MatchResult &
Result)
override {
65 auto *
D = Result.Nodes.getNodeAs<NamedDecl>(
"decl");
68 if (
D->getBeginLoc().isValid()) {
69 AtomicChange Change(*Result.SourceManager,
D->getBeginLoc());
70 Context.reportResult(Change.getKey(),
D->getQualifiedNameAsString());
74 void onStartOfTranslationUnit()
override {
75 Context.reportResult(
"START",
"Start of TU.");
77 void onEndOfTranslationUnit()
override {
78 Context.reportResult(
"END",
"End of TU.");
82 ExecutionContext &Context;
87 static cl::extrahelp
CommonHelp(CommonOptionsParser::HelpMessage);
90 int main(
int argc,
const char **argv) {
91 llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
93 auto Executor = clang::tooling::createExecutorFromCommandLineArgs(
101 ast_matchers::MatchFinder Finder;
102 ToolTemplateCallback
Callback(*Executor->get()->getExecutionContext());
110 namedDecl(cxxRecordDecl(), isExpansionInMainFile()).bind(
"decl"),
113 auto Err = Executor->get()->execute(newFrontendActionFactory(&Finder));
117 Executor->get()->getToolResults()->forEachResult(
118 [](llvm::StringRef key, llvm::StringRef value) {
119 llvm::errs() <<
"----" << key.str() <<
"\n" << value.str() <<
"\n";
Some operations such as code completion produce a set of candidates.
static llvm::StringRef toString(SpecialMemberFunctionsCheck::SpecialMemberFunctionKind K)
llvm::unique_function< void(llvm::Expected< T >)> Callback
A Callback<T> is a void function that accepts Expected<T>.
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
llvm::Optional< llvm::Expected< tooling::AtomicChanges > > Result