[clang] [ExtractAPI] Include +/- symbols for ObjC methods (PR #145035)
Prajwal Nadig via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 20 05:58:37 PDT 2025
https://github.com/snprajwal created https://github.com/llvm/llvm-project/pull/145035
ObjC methods include a +/- prefix to indicate if they are a class or instance method. This information is valuable, and must be included in the navigator generated by ExtractAPI.
rdar://150870936
>From 5937db0685ce9bc559a70c38fdbecef8e7e14591 Mon Sep 17 00:00:00 2001
From: Prajwal Nadig <pnadig at apple.com>
Date: Fri, 20 Jun 2025 13:13:17 +0100
Subject: [PATCH] [ExtractAPI] Include +/- symbols for ObjC methods
ObjC methods include a +/- prefix to indicate if they are a class or
instance method. This information is valuable, and must be included in
the navigator generated by ExtractAPI.
rdar://150870936
---
.../Serialization/SymbolGraphSerializer.cpp | 16 ++++++++++++++++
clang/test/ExtractAPI/objc_instancetype.m | 8 ++++++++
2 files changed, 24 insertions(+)
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 139023f32e8d3..d3df9eb604f27 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -341,6 +341,22 @@ Object serializeNames(const APIRecord *Record) {
serializeArray(Names, "subHeading",
serializeDeclarationFragments(Record->SubHeading));
DeclarationFragments NavigatorFragments;
+ // The +/- prefix for Objective-C methods is important information, and
+ // should be included in the navigator fragment. The entire subheading is
+ // not included as it can contain too much information for other records.
+ switch (Record->getKind()) {
+ case APIRecord::RK_ObjCClassMethod:
+ NavigatorFragments.append("+ ", DeclarationFragments::FragmentKind::Text,
+ /*PreciseIdentifier*/ "");
+ break;
+ case APIRecord::RK_ObjCInstanceMethod:
+ NavigatorFragments.append("- ", DeclarationFragments::FragmentKind::Text,
+ /*PreciseIdentifier*/ "");
+ break;
+ default:
+ break;
+ }
+
NavigatorFragments.append(Record->Name,
DeclarationFragments::FragmentKind::Identifier,
/*PreciseIdentifier*/ "");
diff --git a/clang/test/ExtractAPI/objc_instancetype.m b/clang/test/ExtractAPI/objc_instancetype.m
index 071ebe440918a..dbd47a1f746ff 100644
--- a/clang/test/ExtractAPI/objc_instancetype.m
+++ b/clang/test/ExtractAPI/objc_instancetype.m
@@ -157,6 +157,10 @@ - (id) reset;
},
"names": {
"navigator": [
+ {
+ "kind": "text",
+ "spelling": "- "
+ },
{
"kind": "identifier",
"spelling": "init"
@@ -228,6 +232,10 @@ - (id) reset;
},
"names": {
"navigator": [
+ {
+ "kind": "text",
+ "spelling": "- "
+ },
{
"kind": "identifier",
"spelling": "reset"
More information about the cfe-commits
mailing list