1// RUN: rm -rf %t && mkdir -p %t
2// RUN: clang-doc --output=%t --format=json --executor=standalone %s
3// RUN: FileCheck %s < %t/GlobalNamespace/MyClass.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;
26protected:
27 int protectedMethod();
28
29 int ProtectedField;
30};
31
32// CHECK: {
33// CHECK-NEXT: "Description": [
34// CHECK-NEXT: {
35// CHECK-NEXT: "FullComment": {
36// CHECK-NEXT: "Children": [
37// CHECK-NEXT: {
38// CHECK-NEXT: "ParagraphComment": {
39// CHECK-NEXT: "Children": [
40// CHECK-NEXT: {
41// CHECK-NEXT: "TextComment": " This is a nice class."
42// CHECK-NEXT: },
43// CHECK-NEXT: {
44// CHECK-NEXT: "TextComment": " It has some nice methods and fields."
45// CHECK-NEXT: },
46// CHECK-NEXT: {
47// CHECK-NEXT: "TextComment": ""
48// CHECK-NEXT: }
49// CHECK-NEXT: ]
50// CHECK: {
51// CHECK-NEXT: "BlockCommandComment": {
52// CHECK-NEXT: "Children": [
53// CHECK-NEXT: {
54// CHECK-NEXT: "ParagraphComment": {
55// CHECK-NEXT: "Children": [
56// CHECK-NEXT: {
57// CHECK-NEXT: "TextComment": " This is a brief description."
58// CHECK-NEXT: }
59// CHECK: "Command": "brief"
60// CHECK: "Enums": [
61// CHECK-NEXT: {
62// CHECK-NEXT: "Location": {
63// CHECK-NEXT: "Filename": "{{.*}}class.cpp",
64// CHECK-NEXT: "LineNumber": 17
65// CHECK-NEXT: },
66// CHECK-NEXT: "Members": [
67// CHECK-NEXT: {
68// CHECK-NEXT: "Name": "RED",
69// CHECK-NEXT: "Value": "0"
70// CHECK-NEXT: },
71// CHECK-NEXT: {
72// CHECK-NEXT: "Name": "GREEN",
73// CHECK-NEXT: "Value": "1"
74// CHECK-NEXT: },
75// CHECK-NEXT: {
76// CHECK-NEXT: "Name": "BLUE",
77// CHECK-NEXT: "ValueExpr": "5"
78// CHECK-NEXT: }
79// CHECK-NEXT: ],
80// CHECK-NEXT: "Name": "Color",
81// CHECK-NEXT: "Namespace": [
82// CHECK-NEXT: "MyClass",
83// CHECK-NEXT: "GlobalNamespace"
84// CHECK-NEXT: ],
85// CHECK-NEXT: "Scoped": false,
86// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
87// CHECK-NEXT: }
88// CHECK-NEXT: ],
89// COM: FIXME: FullName is not emitted correctly.
90// CHECK-NEXT: "FullName": "",
91// CHECK-NEXT: "IsTypedef": false,
92// CHECK-NEXT: "Location": {
93// CHECK-NEXT: "Filename": "{{.*}}class.cpp",
94// CHECK-NEXT: "LineNumber": 10
95// CHECK-NEXT: },
96// CHECK-NEXT: "Name": "MyClass",
97// CHECK-NEXT: "Namespace": [
98// CHECK-NEXT: "GlobalNamespace"
99// CHECK-NEXT: ],
100// CHECK-NEXT: "Path": "GlobalNamespace",
101// CHECK-NEXT: "ProtectedFunctions": [
102// CHECK-NEXT: {
103// CHECK-NEXT: "IsStatic": false,
104// CHECK-NEXT: "Name": "protectedMethod",
105// CHECK-NEXT: "Namespace": [
106// CHECK-NEXT: "MyClass",
107// CHECK-NEXT: "GlobalNamespace"
108// CHECK-NEXT: ],
109// CHECK-NEXT: "ReturnType": {
110// CHECK-NEXT: "IsBuiltIn": false,
111// CHECK-NEXT: "IsTemplate": false,
112// CHECK-NEXT: "Name": "int",
113// CHECK-NEXT: "QualName": "int",
114// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
115// CHECK-NEXT: },
116// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
117// CHECK-NEXT: }
118// CHECK-NEXT: ],
119// CHECK-NEXT: "ProtectedMembers": [
120// CHECK-NEXT: {
121// CHECK-NEXT: "Name": "ProtectedField",
122// CHECK-NEXT: "Type": "int"
123// CHECK-NEXT: }
124// CHECK-NEXT: ],
125// CHECK-NEXT: "PublicFunctions": [
126// CHECK-NEXT: {
127// CHECK-NEXT: "IsStatic": false,
128// CHECK-NEXT: "Name": "myMethod",
129// CHECK-NEXT: "Namespace": [
130// CHECK-NEXT: "MyClass",
131// CHECK-NEXT: "GlobalNamespace"
132// CHECK-NEXT: ],
133// CHECK-NEXT: "Params": [
134// CHECK-NEXT: {
135// CHECK-NEXT: "Name": "MyParam",
136// CHECK-NEXT: "Type": "int"
137// CHECK-NEXT: }
138// CHECK-NEXT: ],
139// CHECK-NEXT: "ReturnType": {
140// CHECK-NEXT: "IsBuiltIn": false,
141// CHECK-NEXT: "IsTemplate": false,
142// CHECK-NEXT: "Name": "int",
143// CHECK-NEXT: "QualName": "int",
144// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
145// CHECK-NEXT: },
146// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
147// CHECK-NEXT: },
148// CHECK: "IsStatic": true,
149// CHECK: "Name": "getConst",
150// CHECK: "ReturnType": {
151// CHECK-NEXT: "IsBuiltIn": false,
152// CHECK-NEXT: "IsTemplate": false,
153// CHECK-NEXT: "Name": "const int &",
154// CHECK-NEXT: "QualName": "const int &",
155// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
156// CHECK-NEXT: },
157// CHECK: "PublicMembers": [
158// CHECK-NEXT: {
159// CHECK-NEXT: "Name": "PublicField",
160// CHECK-NEXT: "Type": "int"
161// CHECK-NEXT: }
162// CHECK-NEXT: ],
163// CHECK-NEXT: "Records": [
164// CHECK-NEXT: {
165// CHECK-NEXT: "Name": "NestedClass",
166// CHECK-NEXT: "Path": "GlobalNamespace{{[\/]+}}MyClass",
167// CHECK-NEXT: "QualName": "NestedClass",
168// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
169// CHECK-NEXT: }
170// CHECK-NEXT: ]
171// CHECK-NEXT: "TagType": "struct",
172// CHECK-NEXT: "Typedefs": [
173// CHECK-NEXT: {
174// CHECK-NEXT: "IsUsing": false,
175// CHECK-NEXT: "Location": {
176// CHECK-NEXT: "Filename": "{{.*}}class.cpp",
177// CHECK-NEXT: "LineNumber": 23
178// CHECK-NEXT: },
179// CHECK-NEXT: "Name": "MyTypedef",
180// CHECK-NEXT: "Namespace": [
181// CHECK-NEXT: "MyClass",
182// CHECK-NEXT: "GlobalNamespace"
183// CHECK-NEXT: ],
184// CHECK-NEXT: "TypeDeclaration": "",
185// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
186// CHECK-NEXT: "Underlying": {
187// CHECK-NEXT: "IsBuiltIn": false,
188// CHECK-NEXT: "IsTemplate": false,
189// CHECK-NEXT: "Name": "int",
190// CHECK-NEXT: "QualName": "int",
191// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
192// CHECK: "USR": "{{[0-9A-F]*}}"
193// CHECK-NEXT: }
194

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