13 #include "llvm/Support/YAMLTraits.h" 14 #include "llvm/Support/raw_ostream.h" 21 LLVM_YAML_IS_SEQUENCE_VECTOR(
Location)
23 LLVM_YAML_IS_SEQUENCE_VECTOR(std::unique_ptr<CommentInfo>)
24 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::SmallString<16>)
31 template <>
struct ScalarEnumerationTraits<
clang::AccessSpecifier> {
32 static void enumeration(IO &IO, clang::AccessSpecifier &Value) {
33 IO.enumCase(Value,
"Public", clang::AccessSpecifier::AS_public);
34 IO.enumCase(Value,
"Protected", clang::AccessSpecifier::AS_protected);
35 IO.enumCase(Value,
"Private", clang::AccessSpecifier::AS_private);
36 IO.enumCase(Value,
"None", clang::AccessSpecifier::AS_none);
40 template <>
struct ScalarEnumerationTraits<
clang::TagTypeKind> {
42 IO.enumCase(Value,
"Struct", clang::TagTypeKind::TTK_Struct);
43 IO.enumCase(Value,
"Interface", clang::TagTypeKind::TTK_Interface);
44 IO.enumCase(Value,
"Union", clang::TagTypeKind::TTK_Union);
45 IO.enumCase(Value,
"Class", clang::TagTypeKind::TTK_Class);
46 IO.enumCase(Value,
"Enum", clang::TagTypeKind::TTK_Enum);
50 template <>
struct ScalarEnumerationTraits<
InfoType> {
61 template <
unsigned U>
struct ScalarTraits<SmallString<U>> {
63 static void output(
const SmallString<U> &S,
void *, llvm::raw_ostream &OS) {
64 for (
const auto &C : S)
68 static StringRef
input(StringRef Scalar,
void *, SmallString<U> &Value) {
69 Value.assign(Scalar.begin(), Scalar.end());
73 static QuotingType
mustQuote(StringRef) {
return QuotingType::Single; }
76 template <>
struct ScalarTraits<std::array<unsigned char, 20>> {
78 static void output(
const std::array<unsigned char, 20> &S,
void *,
79 llvm::raw_ostream &OS) {
80 OS << toHex(toStringRef(S));
83 static StringRef
input(StringRef Scalar,
void *,
84 std::array<unsigned char, 20> &Value) {
85 if (Scalar.size() != 40)
86 return "Error: Incorrect scalar size for USR.";
87 Value = StringToSymbol(Scalar);
93 std::string HexString = fromHex(Value);
94 std::copy(HexString.begin(), HexString.end(), USR.begin());
98 static QuotingType
mustQuote(StringRef) {
return QuotingType::Single; }
109 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
113 IO.mapRequired(
"USR", I.
USR);
114 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
115 IO.mapOptional(
"Namespace", I.
Namespace, llvm::SmallVector<Reference, 4>());
121 IO.mapOptional(
"DefLocation", I.DefLoc, Optional<Location>());
122 IO.mapOptional(
"Location", I.Loc, llvm::SmallVector<Location, 2>());
126 IO.mapOptional(
"Kind", I.
Kind, SmallString<16>());
127 IO.mapOptional(
"Text", I.
Text, SmallString<64>());
128 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
129 IO.mapOptional(
"Direction", I.
Direction, SmallString<8>());
130 IO.mapOptional(
"ParamName", I.
ParamName, SmallString<16>());
131 IO.mapOptional(
"CloseName", I.
CloseName, SmallString<16>());
132 IO.mapOptional(
"SelfClosing", I.
SelfClosing,
false);
133 IO.mapOptional(
"Explicit", I.
Explicit,
false);
134 IO.mapOptional(
"Args", I.
Args, llvm::SmallVector<SmallString<16>, 4>());
135 IO.mapOptional(
"AttrKeys", I.
AttrKeys,
136 llvm::SmallVector<SmallString<16>, 4>());
138 llvm::SmallVector<SmallString<16>, 4>());
139 IO.mapOptional(
"Children", I.
Children);
146 IO.mapOptional(
"LineNumber", Loc.
LineNumber, 0);
147 IO.mapOptional(
"Filename", Loc.
Filename, SmallString<32>());
154 IO.mapOptional(
"Name", Ref.
Name, SmallString<16>());
166 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
173 IO.mapOptional(
"Access", I.
Access, clang::AccessSpecifier::AS_none);
184 IO.mapOptional(
"TagType", I.
TagType, clang::TagTypeKind::TTK_Struct);
185 IO.mapOptional(
"Members", I.
Members);
186 IO.mapOptional(
"Parents", I.
Parents, llvm::SmallVector<Reference, 4>());
188 llvm::SmallVector<Reference, 4>());
195 IO.mapOptional(
"Scoped", I.
Scoped,
false);
196 IO.mapOptional(
"Members", I.
Members);
203 IO.mapOptional(
"IsMethod", I.
IsMethod,
false);
205 IO.mapOptional(
"Params", I.
Params);
207 IO.mapOptional(
"Access", I.
Access, clang::AccessSpecifier::AS_none);
215 template <>
struct MappingTraits<std::unique_ptr<CommentInfo>> {
216 static void mapping(IO &IO, std::unique_ptr<CommentInfo> &I) {
233 bool generateDocForInfo(
Info *I, llvm::raw_ostream &OS)
override;
239 llvm::yaml::Output InfoYAML(OS);
242 InfoYAML << *static_cast<clang::doc::NamespaceInfo *>(I);
245 InfoYAML << *static_cast<clang::doc::RecordInfo *>(I);
248 InfoYAML << *static_cast<clang::doc::EnumInfo *>(I);
251 InfoYAML << *static_cast<clang::doc::FunctionInfo *>(I);
254 llvm::errs() <<
"Unexpected info type in index.\n";
260 static GeneratorRegistry::Add<YAMLGenerator>
YAML(YAMLGenerator::Format,
261 "Generator for YAML output.");
SourceLocation Loc
'#' location in the include directive
llvm::SmallVector< Reference, 4 > Namespace
Some operations such as code completion produce a set of candidates.
static void mapping(IO &IO, MemberTypeInfo &I)
static void mapping(IO &IO, Location &Loc)
Generator for YAML documentation.
static StringRef input(StringRef Scalar, void *, std::array< unsigned char, 20 > &Value)
static void SymbolInfoMapping(IO &IO, SymbolInfo &I)
static void enumeration(IO &IO, clang::TagTypeKind &Value)
static void InfoMapping(IO &IO, Info &I)
static void mapping(IO &IO, TypeInfo &I)
static void TypeInfoMapping(IO &IO, TypeInfo &I)
llvm::SmallVector< Reference, 4 > VirtualParents
static QuotingType mustQuote(StringRef)
llvm::SmallVector< FieldTypeInfo, 4 > Params
clang::find_all_symbols::SymbolInfo SymbolInfo
llvm::SmallVector< SmallString< 16 >, 4 > Members
static void mapping(IO &IO, Reference &Ref)
std::vector< CommentInfo > Description
static void enumeration(IO &IO, InfoType &Value)
volatile int YAMLGeneratorAnchorSource
bool generateDocForInfo(Info *I, llvm::raw_ostream &OS) override
static void output(const SmallString< U > &S, void *, llvm::raw_ostream &OS)
static void mapping(IO &IO, FunctionInfo &I)
static void mapping(IO &IO, NamespaceInfo &I)
llvm::SmallVector< Reference, 4 > Parents
static void enumeration(IO &IO, clang::AccessSpecifier &Value)
static StringRef input(StringRef Scalar, void *, SmallString< U > &Value)
static GeneratorRegistry::Add< YAMLGenerator > YAML(YAMLGenerator::Format, "Generator for YAML output.")
static void mapping(IO &IO, RecordInfo &I)
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
static SymbolID StringToSymbol(llvm::StringRef Value)
static const char * Format
SmallString< 32 > Filename
static void mapping(IO &IO, FieldTypeInfo &I)
static void FieldTypeInfoMapping(IO &IO, FieldTypeInfo &I)
llvm::SmallVector< MemberTypeInfo, 4 > Members
static void CommentInfoMapping(IO &IO, CommentInfo &I)
static QuotingType mustQuote(StringRef)
std::array< uint8_t, 20 > SymbolID
static void output(const std::array< unsigned char, 20 > &S, void *, llvm::raw_ostream &OS)
static void mapping(IO &IO, EnumInfo &I)