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