https://github.com/daniel-grumberg updated https://github.com/llvm/llvm-project/pull/110689
>From 30e06bed5b8ba378b2b43f0706617f6978f4be6c Mon Sep 17 00:00:00 2001 From: Daniel Grumberg <dgrumb...@apple.com> Date: Tue, 1 Oct 2024 16:29:30 +0100 Subject: [PATCH] [clang][ExtractAPI] Generate subheading for typedef'd anonymous types 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 --- clang/lib/ExtractAPI/DeclarationFragments.cpp | 3 ++ .../ExtractAPI/typedef_anonymous_record.c | 32 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) 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@MyEnum@Case" // CASE: "pathComponents": [ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits