1// RUN: rm -rf %t && mkdir -p %t
2// RUN: clang-doc --output=%t --format=json --executor=standalone %s
3// RUN: FileCheck %s < %t/_ZTV7MyClass.json
4
5struct Foo;
6
7// This is a nice class.
8// It has some nice methods and fields.
9// @brief This is a brief description.
10struct MyClass {
11 int PublicField;
12
13 int myMethod(int MyParam);
14 static void staticMethod();
15 const int& getConst();
16
17 enum Color {
18 RED,
19 GREEN,
20 BLUE = 5
21 };
22
23 typedef int MyTypedef;
24
25 class NestedClass;
26
27 friend struct Foo;
28 template<typename T> friend void friendFunction(int);
29protected:
30 int protectedMethod();
31
32 int ProtectedField;
33};
34
35// CHECK: {
36// CHECK-NEXT: "Description": [
37// CHECK-NEXT: {
38// CHECK-NEXT: "FullComment": {
39// CHECK-NEXT: "Children": [
40// CHECK-NEXT: {
41// CHECK-NEXT: "ParagraphComment": {
42// CHECK-NEXT: "Children": [
43// CHECK-NEXT: {
44// CHECK-NEXT: "TextComment": " This is a nice class."
45// CHECK-NEXT: },
46// CHECK-NEXT: {
47// CHECK-NEXT: "TextComment": " It has some nice methods and fields."
48// CHECK-NEXT: },
49// CHECK-NEXT: {
50// CHECK-NEXT: "TextComment": ""
51// CHECK-NEXT: }
52// CHECK-NEXT: ]
53// CHECK: {
54// CHECK-NEXT: "BlockCommandComment": {
55// CHECK-NEXT: "Children": [
56// CHECK-NEXT: {
57// CHECK-NEXT: "ParagraphComment": {
58// CHECK-NEXT: "Children": [
59// CHECK-NEXT: {
60// CHECK-NEXT: "TextComment": " This is a brief description."
61// CHECK-NEXT: }
62// CHECK: "Command": "brief"
63// CHECK: "Enums": [
64// CHECK-NEXT: {
65// CHECK-NEXT: "Location": {
66// CHECK-NEXT: "Filename": "{{.*}}class.cpp",
67// CHECK-NEXT: "LineNumber": 17
68// CHECK-NEXT: },
69// CHECK-NEXT: "Members": [
70// CHECK-NEXT: {
71// CHECK-NEXT: "Name": "RED",
72// CHECK-NEXT: "Value": "0"
73// CHECK-NEXT: },
74// CHECK-NEXT: {
75// CHECK-NEXT: "Name": "GREEN",
76// CHECK-NEXT: "Value": "1"
77// CHECK-NEXT: },
78// CHECK-NEXT: {
79// CHECK-NEXT: "Name": "BLUE",
80// CHECK-NEXT: "ValueExpr": "5"
81// CHECK-NEXT: }
82// CHECK-NEXT: ],
83// CHECK-NEXT: "Name": "Color",
84// CHECK-NEXT: "Namespace": [
85// CHECK-NEXT: "MyClass",
86// CHECK-NEXT: "GlobalNamespace"
87// CHECK-NEXT: ],
88// CHECK-NEXT: "Scoped": false,
89// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
90// CHECK-NEXT: }
91// CHECK-NEXT: ],
92// CHECK-NEXT: "Friends": [
93// CHECK-NEXT: {
94// CHECK-NEXT: "IsClass": false,
95// CHECK-NEXT: "Params": [
96// CHECK-NEXT: {
97// CHECK-NEXT: "Name": "",
98// CHECK-NEXT: "Type": "int"
99// CHECK-NEXT: }
100// CHECK-NEXT: ],
101// CHECK-NEXT: "Reference": {
102// CHECK-NEXT: "Name": "friendFunction",
103// CHECK-NEXT: "Path": "",
104// CHECK-NEXT: "QualName": "friendFunction",
105// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
106// CHECK-NEXT: },
107// CHECK-NEXT: "ReturnType": {
108// CHECK-NEXT: "IsBuiltIn": true,
109// CHECK-NEXT: "IsTemplate": false,
110// CHECK-NEXT: "Name": "void",
111// CHECK-NEXT: "QualName": "void",
112// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
113// CHECK-NEXT: },
114// CHECK-NEXT: "Template": {
115// CHECK-NEXT: "Parameters": [
116// CHECK-NEXT: "typename T"
117// CHECK-NEXT: ]
118// CHECK-NEXT: }
119// CHECK-NEXT: },
120// CHECK-NEXT: {
121// CHECK-NEXT: "IsClass": true,
122// CHECK-NEXT: "Reference": {
123// CHECK-NEXT: "Name": "Foo",
124// CHECK-NEXT: "Path": "GlobalNamespace",
125// CHECK-NEXT: "QualName": "Foo",
126// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
127// CHECK-NEXT: }
128// CHECK-NEXT: }
129// CHECK-NEXT: ],
130// COM: FIXME: FullName is not emitted correctly.
131// CHECK-NEXT: "FullName": "",
132// CHECK-NEXT: "IsTypedef": false,
133// CHECK-NEXT: "Location": {
134// CHECK-NEXT: "Filename": "{{.*}}class.cpp",
135// CHECK-NEXT: "LineNumber": 10
136// CHECK-NEXT: },
137// CHECK-NEXT: "MangledName": "_ZTV7MyClass",
138// CHECK-NEXT: "Name": "MyClass",
139// CHECK-NEXT: "Namespace": [
140// CHECK-NEXT: "GlobalNamespace"
141// CHECK-NEXT: ],
142// CHECK-NEXT: "Path": "GlobalNamespace",
143// CHECK-NEXT: "ProtectedFunctions": [
144// CHECK-NEXT: {
145// CHECK-NEXT: "IsStatic": false,
146// CHECK-NEXT: "Name": "protectedMethod",
147// CHECK-NEXT: "Namespace": [
148// CHECK-NEXT: "MyClass",
149// CHECK-NEXT: "GlobalNamespace"
150// CHECK-NEXT: ],
151// CHECK-NEXT: "ReturnType": {
152// CHECK-NEXT: "IsBuiltIn": true,
153// CHECK-NEXT: "IsTemplate": false,
154// CHECK-NEXT: "Name": "int",
155// CHECK-NEXT: "QualName": "int",
156// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
157// CHECK-NEXT: },
158// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
159// CHECK-NEXT: }
160// CHECK-NEXT: ],
161// CHECK-NEXT: "ProtectedMembers": [
162// CHECK-NEXT: {
163// CHECK-NEXT: "Name": "ProtectedField",
164// CHECK-NEXT: "Type": "int"
165// CHECK-NEXT: }
166// CHECK-NEXT: ],
167// CHECK-NEXT: "PublicFunctions": [
168// CHECK-NEXT: {
169// CHECK-NEXT: "IsStatic": false,
170// CHECK-NEXT: "Name": "myMethod",
171// CHECK-NEXT: "Namespace": [
172// CHECK-NEXT: "MyClass",
173// CHECK-NEXT: "GlobalNamespace"
174// CHECK-NEXT: ],
175// CHECK-NEXT: "Params": [
176// CHECK-NEXT: {
177// CHECK-NEXT: "Name": "MyParam",
178// CHECK-NEXT: "Type": "int"
179// CHECK-NEXT: }
180// CHECK-NEXT: ],
181// CHECK-NEXT: "ReturnType": {
182// CHECK-NEXT: "IsBuiltIn": true,
183// CHECK-NEXT: "IsTemplate": false,
184// CHECK-NEXT: "Name": "int",
185// CHECK-NEXT: "QualName": "int",
186// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
187// CHECK-NEXT: },
188// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
189// CHECK-NEXT: },
190// CHECK: "IsStatic": true,
191// CHECK: "Name": "getConst",
192// CHECK: "ReturnType": {
193// CHECK-NEXT: "IsBuiltIn": false,
194// CHECK-NEXT: "IsTemplate": false,
195// CHECK-NEXT: "Name": "const int &",
196// CHECK-NEXT: "QualName": "const int &",
197// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
198// CHECK-NEXT: },
199// CHECK: "PublicMembers": [
200// CHECK-NEXT: {
201// CHECK-NEXT: "Name": "PublicField",
202// CHECK-NEXT: "Type": "int"
203// CHECK-NEXT: }
204// CHECK-NEXT: ],
205// CHECK-NEXT: "Records": [
206// CHECK-NEXT: {
207// CHECK-NEXT: "Name": "NestedClass",
208// CHECK-NEXT: "Path": "GlobalNamespace{{[\/]+}}MyClass",
209// CHECK-NEXT: "QualName": "NestedClass",
210// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
211// CHECK-NEXT: }
212// CHECK-NEXT: ]
213// CHECK-NEXT: "TagType": "struct",
214// CHECK-NEXT: "Typedefs": [
215// CHECK-NEXT: {
216// CHECK-NEXT: "IsUsing": false,
217// CHECK-NEXT: "Location": {
218// CHECK-NEXT: "Filename": "{{.*}}class.cpp",
219// CHECK-NEXT: "LineNumber": 23
220// CHECK-NEXT: },
221// CHECK-NEXT: "Name": "MyTypedef",
222// CHECK-NEXT: "Namespace": [
223// CHECK-NEXT: "MyClass",
224// CHECK-NEXT: "GlobalNamespace"
225// CHECK-NEXT: ],
226// CHECK-NEXT: "TypeDeclaration": "",
227// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
228// CHECK-NEXT: "Underlying": {
229// CHECK-NEXT: "IsBuiltIn": true,
230// CHECK-NEXT: "IsTemplate": false,
231// CHECK-NEXT: "Name": "int",
232// CHECK-NEXT: "QualName": "int",
233// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
234// CHECK: "USR": "{{[0-9A-F]*}}"
235// CHECK-NEXT: }
236

source code of clang-tools-extra/test/clang-doc/json/class.cpp