xref: /llvm-project/clang/test/ExtractAPI/methods.cpp (revision 2bcbe40f8a1c6cc9a256711261d8aa8fde50f7b3)
175f55eb3SErick Velez // RUN: rm -rf %t
2*e05c1b46SDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
3*e05c1b46SDaniel Grumberg // RUN:   -triple arm64-apple-macosx -x c++-header %s -o %t/output.symbols.json -verify
475f55eb3SErick Velez 
575f55eb3SErick Velez class Foo {
6*e05c1b46SDaniel Grumberg   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETCOUNT
775f55eb3SErick Velez   int getCount();
8*e05c1b46SDaniel Grumberg   // GETCOUNT: "!testRelLabel": "memberOf $ c:@S@Foo@F@getCount# $ c:@S@Foo"
9*e05c1b46SDaniel Grumberg   // GETCOUNT-LABEL: "!testLabel":  "c:@S@Foo@F@getCount#"
10*e05c1b46SDaniel Grumberg   // GETCOUNT: "accessLevel": "private",
11*e05c1b46SDaniel Grumberg   // GETCOUNT:      "declarationFragments": [
12*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   {
13*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "kind": "typeIdentifier",
14*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "preciseIdentifier": "c:I",
15*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "spelling": "int"
16*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   },
17*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   {
18*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "kind": "text",
19*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "spelling": " "
20*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   },
21*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   {
22*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "kind": "identifier",
23*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "spelling": "getCount"
24*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   },
25*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   {
26*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "kind": "text",
27*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     "spelling": "();"
28*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   }
29*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT: ],
30*e05c1b46SDaniel Grumberg   // GETCOUNT:      "functionSignature": {
31*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   "returns": [
32*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     {
33*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:       "kind": "typeIdentifier",
34*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:       "preciseIdentifier": "c:I",
35*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:       "spelling": "int"
36*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:     }
37*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   ]
38*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT: },
39*e05c1b46SDaniel Grumberg   // GETCOUNT: "displayName": "Instance Method",
40*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT: "identifier": "c++.method"
41*e05c1b46SDaniel Grumberg   // GETCOUNT: "title": "getCount"
42*e05c1b46SDaniel Grumberg   // GETCOUNT: "pathComponents": [
43*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   "Foo",
44*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT:   "getCount"
45*e05c1b46SDaniel Grumberg   // GETCOUNT-NEXT: ]
4675f55eb3SErick Velez 
47*e05c1b46SDaniel Grumberg   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SETL
4875f55eb3SErick Velez   void setLength(int length) noexcept;
49*e05c1b46SDaniel Grumberg   // SETL: "!testRelLabel": "memberOf $ c:@S@Foo@F@setLength#I# $ c:@S@Foo"
50*e05c1b46SDaniel Grumberg   // SETL-LABEL: "!testLabel": "c:@S@Foo@F@setLength#I#"
51*e05c1b46SDaniel Grumberg   // SETL:      "declarationFragments": [
52*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
53*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "typeIdentifier",
54*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "preciseIdentifier": "c:v",
55*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": "void"
56*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
57*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
58*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "text",
59*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": " "
60*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
61*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
62*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "identifier",
63*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": "setLength"
64*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
65*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
66*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "text",
67*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": "("
68*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
69*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
70*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "typeIdentifier",
71*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "preciseIdentifier": "c:I",
72*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": "int"
73*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
74*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
75*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "text",
76*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": " "
77*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
78*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
79*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "internalParam",
80*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": "length"
81*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
82*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
83*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "text",
84*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": ") "
85*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
86*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
87*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "keyword",
88*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": "noexcept"
89*e05c1b46SDaniel Grumberg   // SETL-NEXT:   },
90*e05c1b46SDaniel Grumberg   // SETL-NEXT:   {
91*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "kind": "text",
92*e05c1b46SDaniel Grumberg   // SETL-NEXT:     "spelling": ";"
93*e05c1b46SDaniel Grumberg   // SETL-NEXT:   }
94*e05c1b46SDaniel Grumberg   // SETL-NEXT: ],
95*e05c1b46SDaniel Grumberg   // SETL:      "functionSignature": {
96*e05c1b46SDaniel Grumberg   // SETL-NEXT:   "parameters": [
97*e05c1b46SDaniel Grumberg   // SETL-NEXT:     {
98*e05c1b46SDaniel Grumberg   // SETL-NEXT:       "declarationFragments": [
99*e05c1b46SDaniel Grumberg   // SETL-NEXT:         {
100*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "kind": "typeIdentifier",
101*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "preciseIdentifier": "c:I",
102*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "spelling": "int"
103*e05c1b46SDaniel Grumberg   // SETL-NEXT:         },
104*e05c1b46SDaniel Grumberg   // SETL-NEXT:         {
105*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "kind": "text",
106*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "spelling": " "
107*e05c1b46SDaniel Grumberg   // SETL-NEXT:         },
108*e05c1b46SDaniel Grumberg   // SETL-NEXT:         {
109*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "kind": "internalParam",
110*e05c1b46SDaniel Grumberg   // SETL-NEXT:           "spelling": "length"
111*e05c1b46SDaniel Grumberg   // SETL-NEXT:         }
112*e05c1b46SDaniel Grumberg   // SETL-NEXT:       ],
113*e05c1b46SDaniel Grumberg   // SETL-NEXT:       "name": "length"
114*e05c1b46SDaniel Grumberg   // SETL-NEXT:     }
115*e05c1b46SDaniel Grumberg   // SETL-NEXT:   ],
116*e05c1b46SDaniel Grumberg   // SETL-NEXT:   "returns": [
117*e05c1b46SDaniel Grumberg   // SETL-NEXT:     {
118*e05c1b46SDaniel Grumberg   // SETL-NEXT:       "kind": "typeIdentifier",
119*e05c1b46SDaniel Grumberg   // SETL-NEXT:       "preciseIdentifier": "c:v",
120*e05c1b46SDaniel Grumberg   // SETL-NEXT:       "spelling": "void"
121*e05c1b46SDaniel Grumberg   // SETL-NEXT:     }
122*e05c1b46SDaniel Grumberg   // SETL-NEXT:   ]
123*e05c1b46SDaniel Grumberg   // SETL-NEXT: },
12475f55eb3SErick Velez 
12575f55eb3SErick Velez public:
126*e05c1b46SDaniel Grumberg   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETFOO
12775f55eb3SErick Velez   static double getFoo();
128*e05c1b46SDaniel Grumberg   // GETFOO: "!testRelLabel": "memberOf $ c:@S@Foo@F@getFoo#S $ c:@S@Foo"
129*e05c1b46SDaniel Grumberg 
130*e05c1b46SDaniel Grumberg   // GETFOO-LABEL: "!testLabel": "c:@S@Foo@F@getFoo#S"
131*e05c1b46SDaniel Grumberg   // GETFOO: "accessLevel": "public",
132*e05c1b46SDaniel Grumberg   // GETFOO:      "declarationFragments": [
133*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   {
134*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "kind": "keyword",
135*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "spelling": "static"
136*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   },
137*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   {
138*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "kind": "text",
139*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "spelling": " "
140*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   },
141*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   {
142*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "kind": "typeIdentifier",
143*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "preciseIdentifier": "c:d",
144*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "spelling": "double"
145*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   },
146*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   {
147*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "kind": "text",
148*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "spelling": " "
149*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   },
150*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   {
151*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "kind": "identifier",
152*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "spelling": "getFoo"
153*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   },
154*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   {
155*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "kind": "text",
156*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     "spelling": "();"
157*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   }
158*e05c1b46SDaniel Grumberg   // GETFOO-NEXT: ],
159*e05c1b46SDaniel Grumberg   // GETFOO:      "functionSignature": {
160*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   "returns": [
161*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     {
162*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:       "kind": "typeIdentifier",
163*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:       "preciseIdentifier": "c:d",
164*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:       "spelling": "double"
165*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:     }
166*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   ]
167*e05c1b46SDaniel Grumberg   // GETFOO-NEXT: },
168*e05c1b46SDaniel Grumberg   // GETFOO:      "kind": {
169*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   "displayName": "Static Method",
170*e05c1b46SDaniel Grumberg   // GETFOO-NEXT:   "identifier": "c++.type.method"
171*e05c1b46SDaniel Grumberg   // GETFOO-NEXT: },
17275f55eb3SErick Velez 
17375f55eb3SErick Velez protected:
174*e05c1b46SDaniel Grumberg   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETBAR
17575f55eb3SErick Velez   constexpr int getBar() const;
176*e05c1b46SDaniel Grumberg   // GETBAR: "!testRelLabel": "memberOf $ c:@S@Foo@F@getBar#1 $ c:@S@Foo"
177b31414bfSDaniel Grumberg 
178*e05c1b46SDaniel Grumberg   // GETBAR-LABEL: "!testLabel": "c:@S@Foo@F@getBar#1"
179*e05c1b46SDaniel Grumberg   // GETBAR: "accessLevel": "protected"
180*e05c1b46SDaniel Grumberg   // GETBAR:      "declarationFragments": [
181*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
182*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "keyword",
183*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": "constexpr"
184*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
185*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
186*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "text",
187*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": " "
188*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
189*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
190*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "typeIdentifier",
191*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "preciseIdentifier": "c:I",
192*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": "int"
193*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
194*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
195*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "text",
196*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": " "
197*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
198*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
199*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "identifier",
200*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": "getBar"
201*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
202*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
203*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "text",
204*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": "() "
205*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
206*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
207*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "keyword",
208*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": "const"
209*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   },
210*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   {
211*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "kind": "text",
212*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:     "spelling": ";"
213*e05c1b46SDaniel Grumberg   // GETBAR-NEXT:   }
214*e05c1b46SDaniel Grumberg   // GETBAR-NEXT: ],
215*e05c1b46SDaniel Grumberg };
216*e05c1b46SDaniel Grumberg 
217*e05c1b46SDaniel Grumberg // expected-no-diagnostics
218