[clang] 33fa40c - [clang][ExtractAPI] Generate subheading for typedef'd anonymous types (#110689)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 2 03:14:31 PDT 2024
Author: Daniel Grumberg
Date: 2024-10-02T11:14:27+01:00
New Revision: 33fa40cc9659b7b56a9b440edc0587ff58793cac
URL: https://github.com/llvm/llvm-project/commit/33fa40cc9659b7b56a9b440edc0587ff58793cac
DIFF: https://github.com/llvm/llvm-project/commit/33fa40cc9659b7b56a9b440edc0587ff58793cac.diff
LOG: [clang][ExtractAPI] Generate subheading for typedef'd anonymous types (#110689)
When an anonymous type has a typedef we normally use the typedef's name
in places where we expect a named identifier in the symbol graph. This
extends this logic to apply to subheadings.
rdar://136690614
Added:
Modified:
clang/lib/ExtractAPI/DeclarationFragments.cpp
clang/test/ExtractAPI/typedef_anonymous_record.c
Removed:
################################################################################
diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp
index 9cb45c8fbf9cbc..66c03863293c2f 100644
--- a/clang/lib/ExtractAPI/DeclarationFragments.cpp
+++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp
@@ -1621,6 +1621,9 @@ DeclarationFragmentsBuilder::getSubHeading(const NamedDecl *Decl) {
cast<CXXMethodDecl>(Decl)->isOverloadedOperator()) {
Fragments.append(Decl->getNameAsString(),
DeclarationFragments::FragmentKind::Identifier);
+ } else if (isa<TagDecl>(Decl) &&
+ cast<TagDecl>(Decl)->getTypedefNameForAnonDecl()) {
+ return getSubHeading(cast<TagDecl>(Decl)->getTypedefNameForAnonDecl());
} else if (Decl->getIdentifier()) {
Fragments.append(Decl->getName(),
DeclarationFragments::FragmentKind::Identifier);
diff --git a/clang/test/ExtractAPI/typedef_anonymous_record.c b/clang/test/ExtractAPI/typedef_anonymous_record.c
index 9c03e9e190ed6b..8e298f8d9ce829 100644
--- a/clang/test/ExtractAPI/typedef_anonymous_record.c
+++ b/clang/test/ExtractAPI/typedef_anonymous_record.c
@@ -35,7 +35,21 @@ typedef struct { } MyStruct;
// MYSTRUCT: "kind": {
// MYSTRUCT-NEXT: "displayName": "Structure",
// MYSTRUCT-NEXT: "identifier": "c.struct"
-// MYSTRUCT: "title": "MyStruct"
+// MYSTRUCT: "names": {
+// MYSTRUCT-NEXT: "navigator": [
+// MYSTRUCT-NEXT: {
+// MYSTRUCT-NEXT: "kind": "identifier",
+// MYSTRUCT-NEXT: "spelling": "MyStruct"
+// MYSTRUCT-NEXT: }
+// MYSTRUCT-NEXT: ],
+// MYSTRUCT-NEXT: "subHeading": [
+// MYSTRUCT-NEXT: {
+// MYSTRUCT-NEXT: "kind": "identifier",
+// MYSTRUCT-NEXT: "spelling": "MyStruct"
+// MYSTRUCT-NEXT: }
+// MYSTRUCT-NEXT: ],
+// MYSTRUCT-NEXT: "title": "MyStruct"
+// MYSTRUCT-NEXT: },
// MYSTRUCT: "pathComponents": [
// MYSTRUCT-NEXT: "MyStruct"
// MYSTRUCT-NEXT: ]
@@ -111,7 +125,21 @@ typedef enum { Case } MyEnum;
// MYENUM: "kind": {
// MYENUM-NEXT: "displayName": "Enumeration",
// MYENUM-NEXT: "identifier": "c.enum"
-// MYENUM: "title": "MyEnum"
+// MYENUM: "names": {
+// MYENUM-NEXT: "navigator": [
+// MYENUM-NEXT: {
+// MYENUM-NEXT: "kind": "identifier",
+// MYENUM-NEXT: "spelling": "MyEnum"
+// MYENUM-NEXT: }
+// MYENUM-NEXT: ],
+// MYENUM-NEXT: "subHeading": [
+// MYENUM-NEXT: {
+// MYENUM-NEXT: "kind": "identifier",
+// MYENUM-NEXT: "spelling": "MyEnum"
+// MYENUM-NEXT: }
+// MYENUM-NEXT: ],
+// MYENUM-NEXT: "title": "MyEnum"
+// MYENUM-NEXT: },
// CASE-LABEL: "!testLabel": "c:@EA at MyEnum@Case"
// CASE: "pathComponents": [
More information about the cfe-commits
mailing list