13 #include "llvm/Support/YAMLTraits.h" 14 #include "llvm/Support/raw_ostream.h" 21 LLVM_YAML_IS_SEQUENCE_VECTOR(
Location)
24 LLVM_YAML_IS_SEQUENCE_VECTOR(
EnumInfo)
25 LLVM_YAML_IS_SEQUENCE_VECTOR(std::unique_ptr<CommentInfo>)
26 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::SmallString<16>)
33 template <>
struct ScalarEnumerationTraits<
clang::AccessSpecifier> {
34 static void enumeration(IO &IO, clang::AccessSpecifier &Value) {
35 IO.enumCase(Value,
"Public", clang::AccessSpecifier::AS_public);
36 IO.enumCase(Value,
"Protected", clang::AccessSpecifier::AS_protected);
37 IO.enumCase(Value,
"Private", clang::AccessSpecifier::AS_private);
38 IO.enumCase(Value,
"None", clang::AccessSpecifier::AS_none);
42 template <>
struct ScalarEnumerationTraits<
clang::TagTypeKind> {
44 IO.enumCase(Value,
"Struct", clang::TagTypeKind::TTK_Struct);
45 IO.enumCase(Value,
"Interface", clang::TagTypeKind::TTK_Interface);
46 IO.enumCase(Value,
"Union", clang::TagTypeKind::TTK_Union);
47 IO.enumCase(Value,
"Class", clang::TagTypeKind::TTK_Class);
48 IO.enumCase(Value,
"Enum", clang::TagTypeKind::TTK_Enum);
52 template <>
struct ScalarEnumerationTraits<
InfoType> {
63 template <
unsigned U>
struct ScalarTraits<SmallString<U>> {
65 static void output(
const SmallString<U> &S,
void *, llvm::raw_ostream &OS) {
66 for (
const auto &C : S)
70 static StringRef
input(StringRef Scalar,
void *, SmallString<U> &Value) {
71 Value.assign(Scalar.begin(), Scalar.end());
75 static QuotingType
mustQuote(StringRef) {
return QuotingType::Single; }
78 template <>
struct ScalarTraits<std::array<unsigned char, 20>> {
80 static void output(
const std::array<unsigned char, 20> &S,
void *,
81 llvm::raw_ostream &OS) {
82 OS << toHex(toStringRef(S));
85 static StringRef
input(StringRef Scalar,
void *,
86 std::array<unsigned char, 20> &Value) {
87 if (Scalar.size() != 40)
88 return "Error: Incorrect scalar size for USR.";
89 Value = StringToSymbol(Scalar);
95 std::string HexString = fromHex(Value);
96 std::copy(HexString.begin(), HexString.end(), USR.begin());
100 static QuotingType
mustQuote(StringRef) {
return QuotingType::Single; }
111 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
115 IO.mapRequired(
"USR", I.
USR);
116 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
117 IO.mapOptional(
"Namespace", I.
Namespace, llvm::SmallVector<Reference, 4>());
123 IO.mapOptional(
"DefLocation", I.DefLoc, Optional<Location>());
124 IO.mapOptional(
"Location", I.Loc, llvm::SmallVector<Location, 2>());
128 IO.mapOptional(
"Kind", I.
Kind, SmallString<16>());
129 IO.mapOptional(
"Text", I.
Text, SmallString<64>());
130 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
131 IO.mapOptional(
"Direction", I.
Direction, SmallString<8>());
132 IO.mapOptional(
"ParamName", I.
ParamName, SmallString<16>());
133 IO.mapOptional(
"CloseName", I.
CloseName, SmallString<16>());
134 IO.mapOptional(
"SelfClosing", I.
SelfClosing,
false);
135 IO.mapOptional(
"Explicit", I.
Explicit,
false);
136 IO.mapOptional(
"Args", I.
Args, llvm::SmallVector<SmallString<16>, 4>());
137 IO.mapOptional(
"AttrKeys", I.
AttrKeys,
138 llvm::SmallVector<SmallString<16>, 4>());
140 llvm::SmallVector<SmallString<16>, 4>());
141 IO.mapOptional(
"Children", I.
Children);
148 IO.mapOptional(
"LineNumber", Loc.
LineNumber, 0);
149 IO.mapOptional(
"Filename", Loc.
Filename, SmallString<32>());
156 IO.mapOptional(
"Name", Ref.
Name, SmallString<16>());
168 IO.mapOptional(
"Name", I.
Name, SmallString<16>());
175 IO.mapOptional(
"Access", I.
Access, clang::AccessSpecifier::AS_none);
183 std::vector<Reference>());
184 IO.mapOptional(
"ChildRecords", I.
ChildRecords, std::vector<Reference>());
193 IO.mapOptional(
"TagType", I.
TagType, clang::TagTypeKind::TTK_Struct);
194 IO.mapOptional(
"Members", I.
Members);
195 IO.mapOptional(
"Parents", I.
Parents, llvm::SmallVector<Reference, 4>());
197 llvm::SmallVector<Reference, 4>());
198 IO.mapOptional(
"ChildRecords", I.
ChildRecords, std::vector<Reference>());
207 IO.mapOptional(
"Scoped", I.
Scoped,
false);
208 IO.mapOptional(
"Members", I.
Members);
215 IO.mapOptional(
"IsMethod", I.
IsMethod,
false);
217 IO.mapOptional(
"Params", I.
Params);
219 IO.mapOptional(
"Access", I.
Access, clang::AccessSpecifier::AS_none);
227 template <>
struct MappingTraits<std::unique_ptr<CommentInfo>> {
228 static void mapping(IO &IO, std::unique_ptr<CommentInfo> &I) {
245 llvm::Error generateDocForInfo(
Info *I, llvm::raw_ostream &OS)
override;
251 llvm::yaml::Output InfoYAML(OS);
254 InfoYAML << *static_cast<clang::doc::NamespaceInfo *>(I);
257 InfoYAML << *static_cast<clang::doc::RecordInfo *>(I);
260 InfoYAML << *static_cast<clang::doc::EnumInfo *>(I);
263 InfoYAML << *static_cast<clang::doc::FunctionInfo *>(I);
266 return llvm::make_error<llvm::StringError>(
"Unexpected info type.\n",
267 llvm::inconvertibleErrorCode());
269 return llvm::Error::success();
272 static GeneratorRegistry::Add<YAMLGenerator>
YAML(YAMLGenerator::Format,
273 "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)
std::vector< FunctionInfo > ChildFunctions
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)
std::vector< FunctionInfo > ChildFunctions
llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS) override
static void TypeInfoMapping(IO &IO, TypeInfo &I)
std::vector< EnumInfo > ChildEnums
std::vector< Reference > ChildRecords
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
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)
std::vector< Reference > ChildNamespaces
std::vector< Reference > ChildRecords
static const char * Format
SmallString< 32 > Filename
std::vector< EnumInfo > ChildEnums
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)