[PATCH] D131739: [clang-doc] Always emit the TagType for RecordInfo
Paul Kirth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 12 11:39:42 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rG68266828b170: [clang-doc] Always emit the TagType for RecordInfo (authored by brettw, committed by paulkirth).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D131739/new/
https://reviews.llvm.org/D131739
Files:
clang-tools-extra/clang-doc/Representation.cpp
clang-tools-extra/clang-doc/Representation.h
clang-tools-extra/clang-doc/YAMLGenerator.cpp
clang-tools-extra/unittests/clang-doc/MergeTest.cpp
clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp
Index: clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp
===================================================================
--- clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp
+++ clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp
@@ -76,6 +76,7 @@
RecordInfo I;
I.Name = "r";
I.Path = "path/to/A";
+ I.IsTypeDef = true;
I.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
I.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
@@ -136,6 +137,7 @@
- LineNumber: 12
Filename: 'test.cpp'
TagType: Class
+IsTypeDef: true
Members:
- Type:
Name: 'int'
@@ -154,6 +156,7 @@
- USR: '0000000000000000000000000000000000000000'
Name: 'F'
Path: 'path/to/F'
+ TagType: Struct
Members:
- Type:
Name: 'int'
Index: clang-tools-extra/unittests/clang-doc/MergeTest.cpp
===================================================================
--- clang-tools-extra/unittests/clang-doc/MergeTest.cpp
+++ clang-tools-extra/unittests/clang-doc/MergeTest.cpp
@@ -78,6 +78,7 @@
TEST(MergeTest, mergeRecordInfos) {
RecordInfo One;
One.Name = "r";
+ One.IsTypeDef = true;
One.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
One.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
@@ -119,6 +120,7 @@
auto Expected = std::make_unique<RecordInfo>();
Expected->Name = "r";
+ Expected->IsTypeDef = true;
Expected->Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
Expected->DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
Index: clang-tools-extra/clang-doc/YAMLGenerator.cpp
===================================================================
--- clang-tools-extra/clang-doc/YAMLGenerator.cpp
+++ clang-tools-extra/clang-doc/YAMLGenerator.cpp
@@ -127,7 +127,8 @@
static void RecordInfoMapping(IO &IO, RecordInfo &I) {
SymbolInfoMapping(IO, I);
- IO.mapOptional("TagType", I.TagType, clang::TagTypeKind::TTK_Struct);
+ IO.mapOptional("TagType", I.TagType);
+ IO.mapOptional("IsTypeDef", I.IsTypeDef, false);
IO.mapOptional("Members", I.Members);
IO.mapOptional("Bases", I.Bases);
IO.mapOptional("Parents", I.Parents, llvm::SmallVector<Reference, 4>());
Index: clang-tools-extra/clang-doc/Representation.h
===================================================================
--- clang-tools-extra/clang-doc/Representation.h
+++ clang-tools-extra/clang-doc/Representation.h
@@ -348,10 +348,15 @@
void merge(RecordInfo &&I);
- TagTypeKind TagType = TagTypeKind::TTK_Struct; // Type of this record
- // (struct, class, union,
- // interface).
- bool IsTypeDef = false; // Indicates if record was declared using typedef
+ // Type of this record (struct, class, union, interface).
+ TagTypeKind TagType = TagTypeKind::TTK_Struct;
+
+ // Indicates if the record was declared using a typedef. Things like anonymous
+ // structs in a typedef:
+ // typedef struct { ... } foo_t;
+ // are converted into records with the typedef as the Name + this flag set.
+ bool IsTypeDef = false;
+
llvm::SmallVector<MemberTypeInfo, 4>
Members; // List of info about record members.
llvm::SmallVector<Reference, 4> Parents; // List of base/parent records
Index: clang-tools-extra/clang-doc/Representation.cpp
===================================================================
--- clang-tools-extra/clang-doc/Representation.cpp
+++ clang-tools-extra/clang-doc/Representation.cpp
@@ -222,6 +222,7 @@
assert(mergeable(Other));
if (!TagType)
TagType = Other.TagType;
+ IsTypeDef = IsTypeDef || Other.IsTypeDef;
if (Members.empty())
Members = std::move(Other.Members);
if (Bases.empty())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131739.452251.patch
Type: text/x-patch
Size: 3913 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220812/c8ab4d08/attachment-0001.bin>
More information about the cfe-commits
mailing list