1 //===-- Serializer.h - ClangDoc Serializer ----------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements the serializing functions fro the clang-doc tool. Given 10 // a particular declaration, it collects the appropriate information and returns 11 // a serialized bitcode string for the declaration. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H 16 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H 17 18 #include "Representation.h" 19 #include "clang/AST/AST.h" 20 #include "clang/AST/CommentVisitor.h" 21 #include <string> 22 #include <vector> 23 24 using namespace clang::comments; 25 26 namespace clang { 27 namespace doc { 28 namespace serialize { 29 30 // The first element will contain the relevant information about the declaration 31 // passed as parameter. 32 // The second element will contain the relevant information about the 33 // declaration's parent, it can be a NamespaceInfo or RecordInfo. 34 // Both elements can be nullptrs if the declaration shouldn't be handled. 35 // When the declaration is handled, the first element will be a nullptr for 36 // EnumDecl, FunctionDecl and CXXMethodDecl; they are only returned wrapped in 37 // its parent scope. For NamespaceDecl and RecordDecl both elements are not 38 // nullptr. 39 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 40 emitInfo(const NamespaceDecl *D, const FullComment *FC, int LineNumber, 41 StringRef File, bool IsFileInRootDir, bool PublicOnly); 42 43 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 44 emitInfo(const RecordDecl *D, const FullComment *FC, int LineNumber, 45 StringRef File, bool IsFileInRootDir, bool PublicOnly); 46 47 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 48 emitInfo(const EnumDecl *D, const FullComment *FC, int LineNumber, 49 StringRef File, bool IsFileInRootDir, bool PublicOnly); 50 51 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 52 emitInfo(const FunctionDecl *D, const FullComment *FC, int LineNumber, 53 StringRef File, bool IsFileInRootDir, bool PublicOnly); 54 55 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 56 emitInfo(const CXXMethodDecl *D, const FullComment *FC, int LineNumber, 57 StringRef File, bool IsFileInRootDir, bool PublicOnly); 58 59 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 60 emitInfo(const TypedefDecl *D, const FullComment *FC, int LineNumber, 61 StringRef File, bool IsFileInRootDir, bool PublicOnly); 62 63 std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> 64 emitInfo(const TypeAliasDecl *D, const FullComment *FC, int LineNumber, 65 StringRef File, bool IsFileInRootDir, bool PublicOnly); 66 67 // Function to hash a given USR value for storage. 68 // As USRs (Unified Symbol Resolution) could be large, especially for functions 69 // with long type arguments, we use 160-bits SHA1(USR) values to 70 // guarantee the uniqueness of symbols while using a relatively small amount of 71 // memory (vs storing USRs directly). 72 SymbolID hashUSR(llvm::StringRef USR); 73 74 std::string serialize(std::unique_ptr<Info> &I); 75 76 } // namespace serialize 77 } // namespace doc 78 } // namespace clang 79 80 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H 81