| 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 |
| 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 | (const NamespaceDecl *D, const FullComment *FC, Location Loc, |
| 41 | bool PublicOnly); |
| 42 | |
| 43 | std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> |
| 44 | (const RecordDecl *D, const FullComment *FC, Location Loc, |
| 45 | bool PublicOnly); |
| 46 | |
| 47 | std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> |
| 48 | (const EnumDecl *D, const FullComment *FC, Location Loc, |
| 49 | bool PublicOnly); |
| 50 | |
| 51 | std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> |
| 52 | (const FunctionDecl *D, const FullComment *FC, Location Loc, |
| 53 | bool PublicOnly); |
| 54 | |
| 55 | std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> |
| 56 | (const VarDecl *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 | (const CXXMethodDecl *D, const FullComment *FC, Location Loc, |
| 61 | bool PublicOnly); |
| 62 | |
| 63 | std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> |
| 64 | (const TypedefDecl *D, const FullComment *FC, Location Loc, |
| 65 | bool PublicOnly); |
| 66 | |
| 67 | std::pair<std::unique_ptr<Info>, std::unique_ptr<Info>> |
| 68 | (const TypeAliasDecl *D, const FullComment *FC, Location Loc, |
| 69 | bool PublicOnly); |
| 70 | |
| 71 | // Function to hash a given USR value for storage. |
| 72 | // As USRs (Unified Symbol Resolution) could be large, especially for functions |
| 73 | // with long type arguments, we use 160-bits SHA1(USR) values to |
| 74 | // guarantee the uniqueness of symbols while using a relatively small amount of |
| 75 | // memory (vs storing USRs directly). |
| 76 | SymbolID hashUSR(llvm::StringRef USR); |
| 77 | |
| 78 | std::string serialize(std::unique_ptr<Info> &I); |
| 79 | |
| 80 | } // namespace serialize |
| 81 | } // namespace doc |
| 82 | } // namespace clang |
| 83 | |
| 84 | #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H |
| 85 | |