//===--- Index.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_INDEX_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_INDEX_H #include "index/Ref.h" #include "index/Relation.h" #include "index/Symbol.h" #include "index/SymbolID.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/FunctionExtras.h" #include "llvm/Support/JSON.h" #include <mutex> #include <optional> #include <string> namespace clang { namespace clangd { struct FuzzyFindRequest { … }; bool fromJSON(const llvm::json::Value &Value, FuzzyFindRequest &Request, llvm::json::Path); llvm::json::Value toJSON(const FuzzyFindRequest &Request); struct LookupRequest { … }; struct RefsRequest { … }; struct RelationsRequest { … }; /// Describes what data is covered by an index. /// /// Indexes may contain symbols but not references from a file, etc. /// This affects merging: if a staler index contains a reference but a fresher /// one does not, we want to trust the fresher index *only* if it actually /// includes references in general. enum class IndexContents : uint8_t { … }; inline constexpr IndexContents operator&(IndexContents L, IndexContents R) { … } inline constexpr IndexContents operator|(IndexContents L, IndexContents R) { … } /// Interface for symbol indexes that can be used for searching or /// matching symbols among a set of symbols based on names or unique IDs. class SymbolIndex { … }; // Delegating implementation of SymbolIndex whose delegate can be swapped out. class SwapIndex : public SymbolIndex { … }; } // namespace clangd } // namespace clang #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_INDEX_H