//===--- SymbolCollector.h ---------------------------------------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_SYMBOLCOLLECTOR_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_SYMBOLCOLLECTOR_H #include "CollectMacros.h" #include "clang-include-cleaner/Record.h" #include "clang-include-cleaner/Types.h" #include "index/Ref.h" #include "index/Relation.h" #include "index/Symbol.h" #include "index/SymbolID.h" #include "index/SymbolLocation.h" #include "index/SymbolOrigin.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Decl.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" #include "clang/Index/IndexDataConsumer.h" #include "clang/Index/IndexSymbol.h" #include "clang/Sema/CodeCompleteConsumer.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include <functional> #include <memory> #include <optional> #include <string> #include <utility> namespace clang { namespace clangd { /// Collect declarations (symbols) from an AST. /// It collects most declarations except: /// - Implicit declarations /// - Anonymous declarations (anonymous enum/class/struct, etc) /// - Declarations in anonymous namespaces in headers /// - Local declarations (in function bodies, blocks, etc) /// - Template specializations /// - Library-specific private declarations (e.g. private declaration generated /// by protobuf compiler) /// /// References to main-file symbols are not collected. /// /// See also shouldCollectSymbol(...). /// /// Clients (e.g. clangd) can use SymbolCollector together with /// index::indexTopLevelDecls to retrieve all symbols when the source file is /// changed. class SymbolCollector : public index::IndexDataConsumer { … }; } // namespace clangd } // namespace clang #endif