1 //===-- Serializer.h - ClangDoc Serializer ----------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
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.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H
16 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H
18 #include "Representation.h"
19 #include "clang/AST/AST.h"
20 #include "clang/AST/CommentVisitor.h"
24 using namespace clang::comments
;
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
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
74 std::string
serialize(std::unique_ptr
<Info
> &I
);
76 } // namespace serialize
80 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H