//===--- Serialization.h - Binary serialization of index data ----*- 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 // //===----------------------------------------------------------------------===// // // This file provides serialization of indexed symbols and other data. // // It writes sections: // - metadata such as version info // - a string table (which is compressed) // - lists of encoded symbols // // The format has a simple versioning scheme: the format version number is // written in the file and non-current versions are rejected when reading. // // Human-readable YAML serialization is also supported, and recommended for // debugging and experiments only. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_SERIALIZATION_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_SERIALIZATION_H #include "Headers.h" #include "index/Index.h" #include "index/Symbol.h" #include "clang/Tooling/CompilationDatabase.h" #include "llvm/Support/Error.h" #include <optional> namespace clang { namespace clangd { enum class IndexFileFormat { … }; // Holds the contents of an index file that was read. struct IndexFileIn { … }; // Parse an index file. The input must be a RIFF or YAML file. llvm::Expected<IndexFileIn> readIndexFile(llvm::StringRef, SymbolOrigin); // Specifies the contents of an index file to be written. struct IndexFileOut { … }; // Serializes an index file. llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const IndexFileOut &O); // Convert a single symbol to YAML, a nice debug representation. std::string toYAML(const Symbol &); std::string toYAML(const std::pair<SymbolID, ArrayRef<Ref>> &); std::string toYAML(const Relation &); std::string toYAML(const Ref &); // Build an in-memory static index from an index file. // The size should be relatively small, so data can be managed in memory. std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef Filename, SymbolOrigin Origin, bool UseDex = true); } // namespace clangd } // namespace clang #endif