xref: /llvm-project/clang/test/ExtractAPI/method_template_spec.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
1d8e9c5d9SErick Velez // RUN: rm -rf %t
2d8e9c5d9SErick Velez // RUN: split-file %s %t
3d8e9c5d9SErick Velez // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4d8e9c5d9SErick Velez // RUN: %t/reference.output.json.in >> %t/reference.output.json
5*e05c1b46SDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \
6d8e9c5d9SErick Velez // RUN:   -x c++-header %t/input.h -o %t/output.json -verify
7d8e9c5d9SErick Velez 
8d8e9c5d9SErick Velez // Generator version is not consistent across test runs, normalize it.
9d8e9c5d9SErick Velez // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10d8e9c5d9SErick Velez // RUN: %t/output.json >> %t/output-normalized.json
11d8e9c5d9SErick Velez // RUN: diff %t/reference.output.json %t/output-normalized.json
12d8e9c5d9SErick Velez 
13d8e9c5d9SErick Velez //--- input.h
14d8e9c5d9SErick Velez class Foo {
15d8e9c5d9SErick Velez   template<typename T> void Bar(T Fizz);
16d8e9c5d9SErick Velez 
17d8e9c5d9SErick Velez   template<> void Bar<int>(int Fizz);
18d8e9c5d9SErick Velez };
19d8e9c5d9SErick Velez 
20d8e9c5d9SErick Velez /// expected-no-diagnostics
21d8e9c5d9SErick Velez 
22d8e9c5d9SErick Velez //--- reference.output.json.in
23d8e9c5d9SErick Velez {
24d8e9c5d9SErick Velez   "metadata": {
25d8e9c5d9SErick Velez     "formatVersion": {
26d8e9c5d9SErick Velez       "major": 0,
27d8e9c5d9SErick Velez       "minor": 5,
28d8e9c5d9SErick Velez       "patch": 3
29d8e9c5d9SErick Velez     },
30d8e9c5d9SErick Velez     "generator": "?"
31d8e9c5d9SErick Velez   },
32d8e9c5d9SErick Velez   "module": {
33d8e9c5d9SErick Velez     "name": "",
34d8e9c5d9SErick Velez     "platform": {
35d8e9c5d9SErick Velez       "architecture": "arm64",
36d8e9c5d9SErick Velez       "operatingSystem": {
37d8e9c5d9SErick Velez         "minimumVersion": {
38d8e9c5d9SErick Velez           "major": 11,
39d8e9c5d9SErick Velez           "minor": 0,
40d8e9c5d9SErick Velez           "patch": 0
41d8e9c5d9SErick Velez         },
42d8e9c5d9SErick Velez         "name": "macosx"
43d8e9c5d9SErick Velez       },
44d8e9c5d9SErick Velez       "vendor": "apple"
45d8e9c5d9SErick Velez     }
46d8e9c5d9SErick Velez   },
47d8e9c5d9SErick Velez   "relationships": [
48d8e9c5d9SErick Velez     {
49d8e9c5d9SErick Velez       "kind": "memberOf",
50d8e9c5d9SErick Velez       "source": "c:@S@Foo@FT@>1#TBar#t0.0#v#",
51d8e9c5d9SErick Velez       "target": "c:@S@Foo",
52d8e9c5d9SErick Velez       "targetFallback": "Foo"
53d8e9c5d9SErick Velez     },
54d8e9c5d9SErick Velez     {
55d8e9c5d9SErick Velez       "kind": "memberOf",
56d8e9c5d9SErick Velez       "source": "c:@S@Foo@F@Bar<#I>#I#",
57d8e9c5d9SErick Velez       "target": "c:@S@Foo",
58d8e9c5d9SErick Velez       "targetFallback": "Foo"
59d8e9c5d9SErick Velez     }
60d8e9c5d9SErick Velez   ],
61d8e9c5d9SErick Velez   "symbols": [
62d8e9c5d9SErick Velez     {
63d8e9c5d9SErick Velez       "accessLevel": "public",
64d8e9c5d9SErick Velez       "declarationFragments": [
65d8e9c5d9SErick Velez         {
66d8e9c5d9SErick Velez           "kind": "keyword",
67d8e9c5d9SErick Velez           "spelling": "class"
68d8e9c5d9SErick Velez         },
69d8e9c5d9SErick Velez         {
70d8e9c5d9SErick Velez           "kind": "text",
71d8e9c5d9SErick Velez           "spelling": " "
72d8e9c5d9SErick Velez         },
73d8e9c5d9SErick Velez         {
74d8e9c5d9SErick Velez           "kind": "identifier",
75d8e9c5d9SErick Velez           "spelling": "Foo"
76d8e9c5d9SErick Velez         },
77d8e9c5d9SErick Velez         {
78d8e9c5d9SErick Velez           "kind": "text",
79d8e9c5d9SErick Velez           "spelling": ";"
80d8e9c5d9SErick Velez         }
81d8e9c5d9SErick Velez       ],
82d8e9c5d9SErick Velez       "identifier": {
83d8e9c5d9SErick Velez         "interfaceLanguage": "c++",
84d8e9c5d9SErick Velez         "precise": "c:@S@Foo"
85d8e9c5d9SErick Velez       },
86d8e9c5d9SErick Velez       "kind": {
87d8e9c5d9SErick Velez         "displayName": "Class",
88d8e9c5d9SErick Velez         "identifier": "c++.class"
89d8e9c5d9SErick Velez       },
90d8e9c5d9SErick Velez       "location": {
91d8e9c5d9SErick Velez         "position": {
9263537872SQuietMisdreavus           "character": 6,
9363537872SQuietMisdreavus           "line": 0
94d8e9c5d9SErick Velez         },
95d8e9c5d9SErick Velez         "uri": "file://INPUT_DIR/input.h"
96d8e9c5d9SErick Velez       },
97d8e9c5d9SErick Velez       "names": {
98d8e9c5d9SErick Velez         "navigator": [
99d8e9c5d9SErick Velez           {
100d8e9c5d9SErick Velez             "kind": "identifier",
101d8e9c5d9SErick Velez             "spelling": "Foo"
102d8e9c5d9SErick Velez           }
103d8e9c5d9SErick Velez         ],
104d8e9c5d9SErick Velez         "subHeading": [
105d8e9c5d9SErick Velez           {
106d8e9c5d9SErick Velez             "kind": "identifier",
107d8e9c5d9SErick Velez             "spelling": "Foo"
108d8e9c5d9SErick Velez           }
109d8e9c5d9SErick Velez         ],
110d8e9c5d9SErick Velez         "title": "Foo"
111d8e9c5d9SErick Velez       },
112d8e9c5d9SErick Velez       "pathComponents": [
113d8e9c5d9SErick Velez         "Foo"
114d8e9c5d9SErick Velez       ]
115d8e9c5d9SErick Velez     },
116d8e9c5d9SErick Velez     {
117d8e9c5d9SErick Velez       "accessLevel": "private",
118d8e9c5d9SErick Velez       "declarationFragments": [
119d8e9c5d9SErick Velez         {
120d8e9c5d9SErick Velez           "kind": "keyword",
121d8e9c5d9SErick Velez           "spelling": "template"
122d8e9c5d9SErick Velez         },
123d8e9c5d9SErick Velez         {
124d8e9c5d9SErick Velez           "kind": "text",
125d8e9c5d9SErick Velez           "spelling": " <"
126d8e9c5d9SErick Velez         },
127d8e9c5d9SErick Velez         {
128d8e9c5d9SErick Velez           "kind": "keyword",
129d8e9c5d9SErick Velez           "spelling": "typename"
130d8e9c5d9SErick Velez         },
131d8e9c5d9SErick Velez         {
132d8e9c5d9SErick Velez           "kind": "text",
133d8e9c5d9SErick Velez           "spelling": " "
134d8e9c5d9SErick Velez         },
135d8e9c5d9SErick Velez         {
136d8e9c5d9SErick Velez           "kind": "genericParameter",
137d8e9c5d9SErick Velez           "spelling": "T"
138d8e9c5d9SErick Velez         },
139d8e9c5d9SErick Velez         {
140d8e9c5d9SErick Velez           "kind": "text",
141d8e9c5d9SErick Velez           "spelling": "> "
142d8e9c5d9SErick Velez         },
143d8e9c5d9SErick Velez         {
144d8e9c5d9SErick Velez           "kind": "typeIdentifier",
145d8e9c5d9SErick Velez           "preciseIdentifier": "c:v",
146d8e9c5d9SErick Velez           "spelling": "void"
147d8e9c5d9SErick Velez         },
148d8e9c5d9SErick Velez         {
149d8e9c5d9SErick Velez           "kind": "text",
150d8e9c5d9SErick Velez           "spelling": " "
151d8e9c5d9SErick Velez         },
152d8e9c5d9SErick Velez         {
153d8e9c5d9SErick Velez           "kind": "identifier",
154d8e9c5d9SErick Velez           "spelling": "Bar"
155d8e9c5d9SErick Velez         },
156d8e9c5d9SErick Velez         {
157d8e9c5d9SErick Velez           "kind": "text",
158d8e9c5d9SErick Velez           "spelling": "("
159d8e9c5d9SErick Velez         },
160d8e9c5d9SErick Velez         {
161d8e9c5d9SErick Velez           "kind": "typeIdentifier",
162d8e9c5d9SErick Velez           "preciseIdentifier": "c:t0.0",
163d8e9c5d9SErick Velez           "spelling": "T"
164d8e9c5d9SErick Velez         },
165d8e9c5d9SErick Velez         {
166d8e9c5d9SErick Velez           "kind": "text",
167d8e9c5d9SErick Velez           "spelling": " "
168d8e9c5d9SErick Velez         },
169d8e9c5d9SErick Velez         {
170d8e9c5d9SErick Velez           "kind": "internalParam",
171d8e9c5d9SErick Velez           "spelling": "Fizz"
172d8e9c5d9SErick Velez         },
173d8e9c5d9SErick Velez         {
174d8e9c5d9SErick Velez           "kind": "text",
175d8e9c5d9SErick Velez           "spelling": ");"
176d8e9c5d9SErick Velez         }
177d8e9c5d9SErick Velez       ],
178d8e9c5d9SErick Velez       "functionSignature": {
179d8e9c5d9SErick Velez         "parameters": [
180d8e9c5d9SErick Velez           {
181d8e9c5d9SErick Velez             "declarationFragments": [
182d8e9c5d9SErick Velez               {
183d8e9c5d9SErick Velez                 "kind": "typeIdentifier",
184d8e9c5d9SErick Velez                 "preciseIdentifier": "c:t0.0",
185d8e9c5d9SErick Velez                 "spelling": "T"
186d8e9c5d9SErick Velez               },
187d8e9c5d9SErick Velez               {
188d8e9c5d9SErick Velez                 "kind": "text",
189d8e9c5d9SErick Velez                 "spelling": " "
190d8e9c5d9SErick Velez               },
191d8e9c5d9SErick Velez               {
192d8e9c5d9SErick Velez                 "kind": "internalParam",
193d8e9c5d9SErick Velez                 "spelling": "Fizz"
194d8e9c5d9SErick Velez               }
195d8e9c5d9SErick Velez             ],
196d8e9c5d9SErick Velez             "name": "Fizz"
197d8e9c5d9SErick Velez           }
198d8e9c5d9SErick Velez         ],
199d8e9c5d9SErick Velez         "returns": [
200d8e9c5d9SErick Velez           {
201d8e9c5d9SErick Velez             "kind": "typeIdentifier",
202d8e9c5d9SErick Velez             "preciseIdentifier": "c:v",
203d8e9c5d9SErick Velez             "spelling": "void"
204d8e9c5d9SErick Velez           }
205d8e9c5d9SErick Velez         ]
206d8e9c5d9SErick Velez       },
207d8e9c5d9SErick Velez       "identifier": {
208d8e9c5d9SErick Velez         "interfaceLanguage": "c++",
209d8e9c5d9SErick Velez         "precise": "c:@S@Foo@FT@>1#TBar#t0.0#v#"
210d8e9c5d9SErick Velez       },
211d8e9c5d9SErick Velez       "kind": {
212d8e9c5d9SErick Velez         "displayName": "Method Template",
213d8e9c5d9SErick Velez         "identifier": "c++.method"
214d8e9c5d9SErick Velez       },
215d8e9c5d9SErick Velez       "location": {
216d8e9c5d9SErick Velez         "position": {
21763537872SQuietMisdreavus           "character": 28,
21863537872SQuietMisdreavus           "line": 1
219d8e9c5d9SErick Velez         },
220d8e9c5d9SErick Velez         "uri": "file://INPUT_DIR/input.h"
221d8e9c5d9SErick Velez       },
222d8e9c5d9SErick Velez       "names": {
223d8e9c5d9SErick Velez         "navigator": [
224d8e9c5d9SErick Velez           {
225d8e9c5d9SErick Velez             "kind": "identifier",
226d8e9c5d9SErick Velez             "spelling": "Bar"
227d8e9c5d9SErick Velez           }
228d8e9c5d9SErick Velez         ],
229d8e9c5d9SErick Velez         "subHeading": [
230d8e9c5d9SErick Velez           {
231d8e9c5d9SErick Velez             "kind": "identifier",
232d8e9c5d9SErick Velez             "spelling": "Bar"
233d8e9c5d9SErick Velez           }
234d8e9c5d9SErick Velez         ],
235d8e9c5d9SErick Velez         "title": "Bar"
236d8e9c5d9SErick Velez       },
237d8e9c5d9SErick Velez       "pathComponents": [
238d8e9c5d9SErick Velez         "Foo",
239d8e9c5d9SErick Velez         "Bar"
240d8e9c5d9SErick Velez       ],
241d8e9c5d9SErick Velez       "swiftGenerics": {
242d8e9c5d9SErick Velez         "parameters": [
243d8e9c5d9SErick Velez           {
244d8e9c5d9SErick Velez             "depth": 0,
245d8e9c5d9SErick Velez             "index": 0,
246d8e9c5d9SErick Velez             "name": "T"
247d8e9c5d9SErick Velez           }
248d8e9c5d9SErick Velez         ]
249d8e9c5d9SErick Velez       }
250d8e9c5d9SErick Velez     },
251d8e9c5d9SErick Velez     {
252d8e9c5d9SErick Velez       "accessLevel": "private",
253d8e9c5d9SErick Velez       "declarationFragments": [
254d8e9c5d9SErick Velez         {
255d8e9c5d9SErick Velez           "kind": "keyword",
256d8e9c5d9SErick Velez           "spelling": "template"
257d8e9c5d9SErick Velez         },
258d8e9c5d9SErick Velez         {
259d8e9c5d9SErick Velez           "kind": "text",
260d8e9c5d9SErick Velez           "spelling": " <> "
261d8e9c5d9SErick Velez         },
262d8e9c5d9SErick Velez         {
263d8e9c5d9SErick Velez           "kind": "typeIdentifier",
264d8e9c5d9SErick Velez           "preciseIdentifier": "c:v",
265d8e9c5d9SErick Velez           "spelling": "void"
266d8e9c5d9SErick Velez         },
267d8e9c5d9SErick Velez         {
268d8e9c5d9SErick Velez           "kind": "text",
269d8e9c5d9SErick Velez           "spelling": " "
270d8e9c5d9SErick Velez         },
271d8e9c5d9SErick Velez         {
272d8e9c5d9SErick Velez           "kind": "identifier",
273d8e9c5d9SErick Velez           "spelling": "Bar"
274d8e9c5d9SErick Velez         },
275d8e9c5d9SErick Velez         {
276d8e9c5d9SErick Velez           "kind": "text",
277d8e9c5d9SErick Velez           "spelling": "<"
278d8e9c5d9SErick Velez         },
279d8e9c5d9SErick Velez         {
280d8e9c5d9SErick Velez           "kind": "typeIdentifier",
281d8e9c5d9SErick Velez           "preciseIdentifier": "c:I",
282d8e9c5d9SErick Velez           "spelling": "int"
283d8e9c5d9SErick Velez         },
284d8e9c5d9SErick Velez         {
285d8e9c5d9SErick Velez           "kind": "text",
286d8e9c5d9SErick Velez           "spelling": ">("
287d8e9c5d9SErick Velez         },
288d8e9c5d9SErick Velez         {
289d8e9c5d9SErick Velez           "kind": "typeIdentifier",
290d8e9c5d9SErick Velez           "preciseIdentifier": "c:I",
291d8e9c5d9SErick Velez           "spelling": "int"
292d8e9c5d9SErick Velez         },
293d8e9c5d9SErick Velez         {
294d8e9c5d9SErick Velez           "kind": "text",
295d8e9c5d9SErick Velez           "spelling": " "
296d8e9c5d9SErick Velez         },
297d8e9c5d9SErick Velez         {
298d8e9c5d9SErick Velez           "kind": "internalParam",
299d8e9c5d9SErick Velez           "spelling": "Fizz"
300d8e9c5d9SErick Velez         },
301d8e9c5d9SErick Velez         {
302d8e9c5d9SErick Velez           "kind": "text",
303d8e9c5d9SErick Velez           "spelling": ");"
304d8e9c5d9SErick Velez         }
305d8e9c5d9SErick Velez       ],
306d8e9c5d9SErick Velez       "functionSignature": {
307d8e9c5d9SErick Velez         "parameters": [
308d8e9c5d9SErick Velez           {
309d8e9c5d9SErick Velez             "declarationFragments": [
310d8e9c5d9SErick Velez               {
311d8e9c5d9SErick Velez                 "kind": "typeIdentifier",
312d8e9c5d9SErick Velez                 "preciseIdentifier": "c:I",
313d8e9c5d9SErick Velez                 "spelling": "int"
314d8e9c5d9SErick Velez               },
315d8e9c5d9SErick Velez               {
316d8e9c5d9SErick Velez                 "kind": "text",
317d8e9c5d9SErick Velez                 "spelling": " "
318d8e9c5d9SErick Velez               },
319d8e9c5d9SErick Velez               {
320d8e9c5d9SErick Velez                 "kind": "internalParam",
321d8e9c5d9SErick Velez                 "spelling": "Fizz"
322d8e9c5d9SErick Velez               }
323d8e9c5d9SErick Velez             ],
324d8e9c5d9SErick Velez             "name": "Fizz"
325d8e9c5d9SErick Velez           }
326d8e9c5d9SErick Velez         ],
327d8e9c5d9SErick Velez         "returns": [
328d8e9c5d9SErick Velez           {
329d8e9c5d9SErick Velez             "kind": "typeIdentifier",
330d8e9c5d9SErick Velez             "preciseIdentifier": "c:v",
331d8e9c5d9SErick Velez             "spelling": "void"
332d8e9c5d9SErick Velez           }
333d8e9c5d9SErick Velez         ]
334d8e9c5d9SErick Velez       },
335d8e9c5d9SErick Velez       "identifier": {
336d8e9c5d9SErick Velez         "interfaceLanguage": "c++",
337d8e9c5d9SErick Velez         "precise": "c:@S@Foo@F@Bar<#I>#I#"
338d8e9c5d9SErick Velez       },
339d8e9c5d9SErick Velez       "kind": {
340d8e9c5d9SErick Velez         "displayName": "Method Template Specialization",
341d8e9c5d9SErick Velez         "identifier": "c++.method"
342d8e9c5d9SErick Velez       },
343d8e9c5d9SErick Velez       "location": {
344d8e9c5d9SErick Velez         "position": {
34563537872SQuietMisdreavus           "character": 18,
34663537872SQuietMisdreavus           "line": 3
347d8e9c5d9SErick Velez         },
348d8e9c5d9SErick Velez         "uri": "file://INPUT_DIR/input.h"
349d8e9c5d9SErick Velez       },
350d8e9c5d9SErick Velez       "names": {
351d8e9c5d9SErick Velez         "navigator": [
352d8e9c5d9SErick Velez           {
353d8e9c5d9SErick Velez             "kind": "identifier",
354d8e9c5d9SErick Velez             "spelling": "Bar"
355d8e9c5d9SErick Velez           }
356d8e9c5d9SErick Velez         ],
357d8e9c5d9SErick Velez         "subHeading": [
358d8e9c5d9SErick Velez           {
359d8e9c5d9SErick Velez             "kind": "identifier",
360d8e9c5d9SErick Velez             "spelling": "Bar"
361d8e9c5d9SErick Velez           }
362d8e9c5d9SErick Velez         ],
363d8e9c5d9SErick Velez         "title": "Bar"
364d8e9c5d9SErick Velez       },
365d8e9c5d9SErick Velez       "pathComponents": [
366d8e9c5d9SErick Velez         "Foo",
367d8e9c5d9SErick Velez         "Bar"
368d8e9c5d9SErick Velez       ]
369d8e9c5d9SErick Velez     }
370d8e9c5d9SErick Velez   ]
371d8e9c5d9SErick Velez }
372