19 #include "clang/Tooling/CommonOptionsParser.h" 20 #include "clang/Tooling/Execution.h" 21 #include "clang/Tooling/Tooling.h" 22 #include "llvm/Support/CommandLine.h" 23 #include "llvm/Support/Signals.h" 29 static llvm::cl::opt<IndexFileFormat>
30 Format(
"format", llvm::cl::desc(
"Format of the index to be written"),
32 "human-readable YAML format"),
34 "binary RIFF format")),
37 class IndexActionFactory :
public tooling::FrontendActionFactory {
39 IndexActionFactory(IndexFileIn &
Result) : Result(Result) {}
41 clang::FrontendAction *create()
override {
42 SymbolCollector::Options Opts;
47 std::lock_guard<std::mutex> Lock(SymbolsMu);
48 for (
const auto &Sym : S) {
49 if (
const auto *Existing = Symbols.find(Sym.ID))
56 std::lock_guard<std::mutex> Lock(SymbolsMu);
57 for (
const auto &Sym : S) {
59 for (
const auto &Ref : Sym.second)
60 Refs.insert(Sym.first, Ref);
69 ~IndexActionFactory() {
70 Result.Symbols = std::move(Symbols).build();
71 Result.Refs = std::move(Refs).build();
77 SymbolSlab::Builder Symbols;
78 RefSlab::Builder Refs;
85 int main(
int argc,
const char **argv) {
86 llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
88 const char *Overview = R
"( 89 Creates an index of symbol information etc in a whole project. 91 Example usage for a project using CMake compile commands: 93 $ clangd-indexer --executor=all-TUs compile_commands.json > clangd.dex 95 Example usage for file sequence index without flags: 97 $ clangd-indexer File1.cpp File2.cpp ... FileN.cpp > clangd.dex 99 Note: only symbols from header files will be indexed. 102 auto Executor = clang::tooling::createExecutorFromCommandLineArgs(
103 argc, argv, llvm::cl::GeneralCategory, Overview);
112 auto Err = Executor->get()->execute(
113 llvm::make_unique<clang::clangd::IndexActionFactory>(Data));
120 Out.
Format = clang::clangd::Format;
int main(int argc, const char **argv)
static llvm::StringRef toString(SpecialMemberFunctionsCheck::SpecialMemberFunctionKind K)
Symbol mergeSymbol(const Symbol &L, const Symbol &R)
llvm::Optional< llvm::Expected< tooling::AtomicChanges > > Result
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
std::unique_ptr< FrontendAction > createStaticIndexingAction(SymbolCollector::Options Opts, std::function< void(SymbolSlab)> SymbolsCallback, std::function< void(RefSlab)> RefsCallback, std::function< void(IncludeGraph)> IncludeGraphCallback)