37 #include "clang/ASTMatchers/ASTMatchFinder.h" 38 #include "clang/ASTMatchers/ASTMatchers.h" 39 #include "clang/Basic/SourceManager.h" 40 #include "clang/Frontend/FrontendActions.h" 41 #include "clang/Lex/Lexer.h" 42 #include "clang/Tooling/CommonOptionsParser.h" 43 #include "clang/Tooling/Execution.h" 44 #include "clang/Tooling/Refactoring.h" 45 #include "clang/Tooling/Refactoring/AtomicChange.h" 46 #include "clang/Tooling/Tooling.h" 47 #include "llvm/Support/CommandLine.h" 48 #include "llvm/Support/MemoryBuffer.h" 49 #include "llvm/Support/Signals.h" 51 using namespace clang;
57 class ToolTemplateCallback :
public MatchFinder::MatchCallback {
59 ToolTemplateCallback(ExecutionContext &Context) : Context(Context) {}
61 void run(
const MatchFinder::MatchResult &Result)
override {
66 auto *D = Result.Nodes.getNodeAs<NamedDecl>(
"decl");
69 if (D->getLocStart().isValid()) {
70 AtomicChange Change(*Result.SourceManager, D->getLocStart());
71 Context.reportResult(Change.getKey(), D->getQualifiedNameAsString());
75 void onStartOfTranslationUnit()
override {
76 Context.reportResult(
"START",
"Start of TU.");
78 void onEndOfTranslationUnit()
override {
79 Context.reportResult(
"END",
"End of TU.");
83 ExecutionContext &Context;
88 static cl::extrahelp
CommonHelp(CommonOptionsParser::HelpMessage);
91 int main(
int argc,
const char **argv) {
92 llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
94 auto Executor = clang::tooling::createExecutorFromCommandLineArgs(
102 ast_matchers::MatchFinder Finder;
103 ToolTemplateCallback
Callback(*Executor->get()->getExecutionContext());
111 namedDecl(cxxRecordDecl(), isExpansionInMainFile()).bind(
"decl"),
114 auto Err = Executor->get()->execute(newFrontendActionFactory(&Finder));
118 Executor->get()->getToolResults()->forEachResult(
119 [](llvm::StringRef key, llvm::StringRef value) {
120 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++ -*-===//