xref: /llvm-project/clang/test/ExtractAPI/methods.cpp (revision 2bcbe40f8a1c6cc9a256711261d8aa8fde50f7b3)
1 // RUN: rm -rf %t
2 // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
3 // RUN:   -triple arm64-apple-macosx -x c++-header %s -o %t/output.symbols.json -verify
4 
5 class Foo {
6   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETCOUNT
7   int getCount();
8   // GETCOUNT: "!testRelLabel": "memberOf $ c:@S@Foo@F@getCount# $ c:@S@Foo"
9   // GETCOUNT-LABEL: "!testLabel":  "c:@S@Foo@F@getCount#"
10   // GETCOUNT: "accessLevel": "private",
11   // GETCOUNT:      "declarationFragments": [
12   // GETCOUNT-NEXT:   {
13   // GETCOUNT-NEXT:     "kind": "typeIdentifier",
14   // GETCOUNT-NEXT:     "preciseIdentifier": "c:I",
15   // GETCOUNT-NEXT:     "spelling": "int"
16   // GETCOUNT-NEXT:   },
17   // GETCOUNT-NEXT:   {
18   // GETCOUNT-NEXT:     "kind": "text",
19   // GETCOUNT-NEXT:     "spelling": " "
20   // GETCOUNT-NEXT:   },
21   // GETCOUNT-NEXT:   {
22   // GETCOUNT-NEXT:     "kind": "identifier",
23   // GETCOUNT-NEXT:     "spelling": "getCount"
24   // GETCOUNT-NEXT:   },
25   // GETCOUNT-NEXT:   {
26   // GETCOUNT-NEXT:     "kind": "text",
27   // GETCOUNT-NEXT:     "spelling": "();"
28   // GETCOUNT-NEXT:   }
29   // GETCOUNT-NEXT: ],
30   // GETCOUNT:      "functionSignature": {
31   // GETCOUNT-NEXT:   "returns": [
32   // GETCOUNT-NEXT:     {
33   // GETCOUNT-NEXT:       "kind": "typeIdentifier",
34   // GETCOUNT-NEXT:       "preciseIdentifier": "c:I",
35   // GETCOUNT-NEXT:       "spelling": "int"
36   // GETCOUNT-NEXT:     }
37   // GETCOUNT-NEXT:   ]
38   // GETCOUNT-NEXT: },
39   // GETCOUNT: "displayName": "Instance Method",
40   // GETCOUNT-NEXT: "identifier": "c++.method"
41   // GETCOUNT: "title": "getCount"
42   // GETCOUNT: "pathComponents": [
43   // GETCOUNT-NEXT:   "Foo",
44   // GETCOUNT-NEXT:   "getCount"
45   // GETCOUNT-NEXT: ]
46 
47   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SETL
48   void setLength(int length) noexcept;
49   // SETL: "!testRelLabel": "memberOf $ c:@S@Foo@F@setLength#I# $ c:@S@Foo"
50   // SETL-LABEL: "!testLabel": "c:@S@Foo@F@setLength#I#"
51   // SETL:      "declarationFragments": [
52   // SETL-NEXT:   {
53   // SETL-NEXT:     "kind": "typeIdentifier",
54   // SETL-NEXT:     "preciseIdentifier": "c:v",
55   // SETL-NEXT:     "spelling": "void"
56   // SETL-NEXT:   },
57   // SETL-NEXT:   {
58   // SETL-NEXT:     "kind": "text",
59   // SETL-NEXT:     "spelling": " "
60   // SETL-NEXT:   },
61   // SETL-NEXT:   {
62   // SETL-NEXT:     "kind": "identifier",
63   // SETL-NEXT:     "spelling": "setLength"
64   // SETL-NEXT:   },
65   // SETL-NEXT:   {
66   // SETL-NEXT:     "kind": "text",
67   // SETL-NEXT:     "spelling": "("
68   // SETL-NEXT:   },
69   // SETL-NEXT:   {
70   // SETL-NEXT:     "kind": "typeIdentifier",
71   // SETL-NEXT:     "preciseIdentifier": "c:I",
72   // SETL-NEXT:     "spelling": "int"
73   // SETL-NEXT:   },
74   // SETL-NEXT:   {
75   // SETL-NEXT:     "kind": "text",
76   // SETL-NEXT:     "spelling": " "
77   // SETL-NEXT:   },
78   // SETL-NEXT:   {
79   // SETL-NEXT:     "kind": "internalParam",
80   // SETL-NEXT:     "spelling": "length"
81   // SETL-NEXT:   },
82   // SETL-NEXT:   {
83   // SETL-NEXT:     "kind": "text",
84   // SETL-NEXT:     "spelling": ") "
85   // SETL-NEXT:   },
86   // SETL-NEXT:   {
87   // SETL-NEXT:     "kind": "keyword",
88   // SETL-NEXT:     "spelling": "noexcept"
89   // SETL-NEXT:   },
90   // SETL-NEXT:   {
91   // SETL-NEXT:     "kind": "text",
92   // SETL-NEXT:     "spelling": ";"
93   // SETL-NEXT:   }
94   // SETL-NEXT: ],
95   // SETL:      "functionSignature": {
96   // SETL-NEXT:   "parameters": [
97   // SETL-NEXT:     {
98   // SETL-NEXT:       "declarationFragments": [
99   // SETL-NEXT:         {
100   // SETL-NEXT:           "kind": "typeIdentifier",
101   // SETL-NEXT:           "preciseIdentifier": "c:I",
102   // SETL-NEXT:           "spelling": "int"
103   // SETL-NEXT:         },
104   // SETL-NEXT:         {
105   // SETL-NEXT:           "kind": "text",
106   // SETL-NEXT:           "spelling": " "
107   // SETL-NEXT:         },
108   // SETL-NEXT:         {
109   // SETL-NEXT:           "kind": "internalParam",
110   // SETL-NEXT:           "spelling": "length"
111   // SETL-NEXT:         }
112   // SETL-NEXT:       ],
113   // SETL-NEXT:       "name": "length"
114   // SETL-NEXT:     }
115   // SETL-NEXT:   ],
116   // SETL-NEXT:   "returns": [
117   // SETL-NEXT:     {
118   // SETL-NEXT:       "kind": "typeIdentifier",
119   // SETL-NEXT:       "preciseIdentifier": "c:v",
120   // SETL-NEXT:       "spelling": "void"
121   // SETL-NEXT:     }
122   // SETL-NEXT:   ]
123   // SETL-NEXT: },
124 
125 public:
126   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETFOO
127   static double getFoo();
128   // GETFOO: "!testRelLabel": "memberOf $ c:@S@Foo@F@getFoo#S $ c:@S@Foo"
129 
130   // GETFOO-LABEL: "!testLabel": "c:@S@Foo@F@getFoo#S"
131   // GETFOO: "accessLevel": "public",
132   // GETFOO:      "declarationFragments": [
133   // GETFOO-NEXT:   {
134   // GETFOO-NEXT:     "kind": "keyword",
135   // GETFOO-NEXT:     "spelling": "static"
136   // GETFOO-NEXT:   },
137   // GETFOO-NEXT:   {
138   // GETFOO-NEXT:     "kind": "text",
139   // GETFOO-NEXT:     "spelling": " "
140   // GETFOO-NEXT:   },
141   // GETFOO-NEXT:   {
142   // GETFOO-NEXT:     "kind": "typeIdentifier",
143   // GETFOO-NEXT:     "preciseIdentifier": "c:d",
144   // GETFOO-NEXT:     "spelling": "double"
145   // GETFOO-NEXT:   },
146   // GETFOO-NEXT:   {
147   // GETFOO-NEXT:     "kind": "text",
148   // GETFOO-NEXT:     "spelling": " "
149   // GETFOO-NEXT:   },
150   // GETFOO-NEXT:   {
151   // GETFOO-NEXT:     "kind": "identifier",
152   // GETFOO-NEXT:     "spelling": "getFoo"
153   // GETFOO-NEXT:   },
154   // GETFOO-NEXT:   {
155   // GETFOO-NEXT:     "kind": "text",
156   // GETFOO-NEXT:     "spelling": "();"
157   // GETFOO-NEXT:   }
158   // GETFOO-NEXT: ],
159   // GETFOO:      "functionSignature": {
160   // GETFOO-NEXT:   "returns": [
161   // GETFOO-NEXT:     {
162   // GETFOO-NEXT:       "kind": "typeIdentifier",
163   // GETFOO-NEXT:       "preciseIdentifier": "c:d",
164   // GETFOO-NEXT:       "spelling": "double"
165   // GETFOO-NEXT:     }
166   // GETFOO-NEXT:   ]
167   // GETFOO-NEXT: },
168   // GETFOO:      "kind": {
169   // GETFOO-NEXT:   "displayName": "Static Method",
170   // GETFOO-NEXT:   "identifier": "c++.type.method"
171   // GETFOO-NEXT: },
172 
173 protected:
174   // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETBAR
175   constexpr int getBar() const;
176   // GETBAR: "!testRelLabel": "memberOf $ c:@S@Foo@F@getBar#1 $ c:@S@Foo"
177 
178   // GETBAR-LABEL: "!testLabel": "c:@S@Foo@F@getBar#1"
179   // GETBAR: "accessLevel": "protected"
180   // GETBAR:      "declarationFragments": [
181   // GETBAR-NEXT:   {
182   // GETBAR-NEXT:     "kind": "keyword",
183   // GETBAR-NEXT:     "spelling": "constexpr"
184   // GETBAR-NEXT:   },
185   // GETBAR-NEXT:   {
186   // GETBAR-NEXT:     "kind": "text",
187   // GETBAR-NEXT:     "spelling": " "
188   // GETBAR-NEXT:   },
189   // GETBAR-NEXT:   {
190   // GETBAR-NEXT:     "kind": "typeIdentifier",
191   // GETBAR-NEXT:     "preciseIdentifier": "c:I",
192   // GETBAR-NEXT:     "spelling": "int"
193   // GETBAR-NEXT:   },
194   // GETBAR-NEXT:   {
195   // GETBAR-NEXT:     "kind": "text",
196   // GETBAR-NEXT:     "spelling": " "
197   // GETBAR-NEXT:   },
198   // GETBAR-NEXT:   {
199   // GETBAR-NEXT:     "kind": "identifier",
200   // GETBAR-NEXT:     "spelling": "getBar"
201   // GETBAR-NEXT:   },
202   // GETBAR-NEXT:   {
203   // GETBAR-NEXT:     "kind": "text",
204   // GETBAR-NEXT:     "spelling": "() "
205   // GETBAR-NEXT:   },
206   // GETBAR-NEXT:   {
207   // GETBAR-NEXT:     "kind": "keyword",
208   // GETBAR-NEXT:     "spelling": "const"
209   // GETBAR-NEXT:   },
210   // GETBAR-NEXT:   {
211   // GETBAR-NEXT:     "kind": "text",
212   // GETBAR-NEXT:     "spelling": ";"
213   // GETBAR-NEXT:   }
214   // GETBAR-NEXT: ],
215 };
216 
217 // expected-no-diagnostics
218