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@MyEnum@Case" // CASE: "pathComponents": [ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits