xref: /llvm-project/clang/test/ExtractAPI/method_template.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
1 // RUN: rm -rf %t
2 // RUN: split-file %s %t
3 // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4 // RUN: %t/reference.output.json.in >> %t/reference.output.json
5 // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \
6 // RUN:   -x c++-header %t/input.h -o %t/output.json -verify
7 
8 // Generator version is not consistent across test runs, normalize it.
9 // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10 // RUN: %t/output.json >> %t/output-normalized.json
11 // RUN: diff %t/reference.output.json %t/output-normalized.json
12 
13 //--- input.h
14 class Foo {
15   template<typename T> void Bar(T Fizz);
16 };
17 
18 /// expected-no-diagnostics
19 
20 //--- reference.output.json.in
21 {
22   "metadata": {
23     "formatVersion": {
24       "major": 0,
25       "minor": 5,
26       "patch": 3
27     },
28     "generator": "?"
29   },
30   "module": {
31     "name": "",
32     "platform": {
33       "architecture": "arm64",
34       "operatingSystem": {
35         "minimumVersion": {
36           "major": 11,
37           "minor": 0,
38           "patch": 0
39         },
40         "name": "macosx"
41       },
42       "vendor": "apple"
43     }
44   },
45   "relationships": [
46     {
47       "kind": "memberOf",
48       "source": "c:@S@Foo@FT@>1#TBar#t0.0#v#",
49       "target": "c:@S@Foo",
50       "targetFallback": "Foo"
51     }
52   ],
53   "symbols": [
54     {
55       "accessLevel": "public",
56       "declarationFragments": [
57         {
58           "kind": "keyword",
59           "spelling": "class"
60         },
61         {
62           "kind": "text",
63           "spelling": " "
64         },
65         {
66           "kind": "identifier",
67           "spelling": "Foo"
68         },
69         {
70           "kind": "text",
71           "spelling": ";"
72         }
73       ],
74       "identifier": {
75         "interfaceLanguage": "c++",
76         "precise": "c:@S@Foo"
77       },
78       "kind": {
79         "displayName": "Class",
80         "identifier": "c++.class"
81       },
82       "location": {
83         "position": {
84           "character": 6,
85           "line": 0
86         },
87         "uri": "file://INPUT_DIR/input.h"
88       },
89       "names": {
90         "navigator": [
91           {
92             "kind": "identifier",
93             "spelling": "Foo"
94           }
95         ],
96         "subHeading": [
97           {
98             "kind": "identifier",
99             "spelling": "Foo"
100           }
101         ],
102         "title": "Foo"
103       },
104       "pathComponents": [
105         "Foo"
106       ]
107     },
108     {
109       "accessLevel": "private",
110       "declarationFragments": [
111         {
112           "kind": "keyword",
113           "spelling": "template"
114         },
115         {
116           "kind": "text",
117           "spelling": " <"
118         },
119         {
120           "kind": "keyword",
121           "spelling": "typename"
122         },
123         {
124           "kind": "text",
125           "spelling": " "
126         },
127         {
128           "kind": "genericParameter",
129           "spelling": "T"
130         },
131         {
132           "kind": "text",
133           "spelling": "> "
134         },
135         {
136           "kind": "typeIdentifier",
137           "preciseIdentifier": "c:v",
138           "spelling": "void"
139         },
140         {
141           "kind": "text",
142           "spelling": " "
143         },
144         {
145           "kind": "identifier",
146           "spelling": "Bar"
147         },
148         {
149           "kind": "text",
150           "spelling": "("
151         },
152         {
153           "kind": "typeIdentifier",
154           "preciseIdentifier": "c:t0.0",
155           "spelling": "T"
156         },
157         {
158           "kind": "text",
159           "spelling": " "
160         },
161         {
162           "kind": "internalParam",
163           "spelling": "Fizz"
164         },
165         {
166           "kind": "text",
167           "spelling": ");"
168         }
169       ],
170       "functionSignature": {
171         "parameters": [
172           {
173             "declarationFragments": [
174               {
175                 "kind": "typeIdentifier",
176                 "preciseIdentifier": "c:t0.0",
177                 "spelling": "T"
178               },
179               {
180                 "kind": "text",
181                 "spelling": " "
182               },
183               {
184                 "kind": "internalParam",
185                 "spelling": "Fizz"
186               }
187             ],
188             "name": "Fizz"
189           }
190         ],
191         "returns": [
192           {
193             "kind": "typeIdentifier",
194             "preciseIdentifier": "c:v",
195             "spelling": "void"
196           }
197         ]
198       },
199       "identifier": {
200         "interfaceLanguage": "c++",
201         "precise": "c:@S@Foo@FT@>1#TBar#t0.0#v#"
202       },
203       "kind": {
204         "displayName": "Method Template",
205         "identifier": "c++.method"
206       },
207       "location": {
208         "position": {
209           "character": 28,
210           "line": 1
211         },
212         "uri": "file://INPUT_DIR/input.h"
213       },
214       "names": {
215         "navigator": [
216           {
217             "kind": "identifier",
218             "spelling": "Bar"
219           }
220         ],
221         "subHeading": [
222           {
223             "kind": "identifier",
224             "spelling": "Bar"
225           }
226         ],
227         "title": "Bar"
228       },
229       "pathComponents": [
230         "Foo",
231         "Bar"
232       ],
233       "swiftGenerics": {
234         "parameters": [
235           {
236             "depth": 0,
237             "index": 0,
238             "name": "T"
239           }
240         ]
241       }
242     }
243   ]
244 }
245