Completed
Pull Request — develop (#1492)
by Zack
15:57
created
php-compatibility/PHPCompatibility/Sniffs/FunctionUse/NewFunctionsSniff.php 1 patch
Indentation   +1915 added lines, -1915 removed lines patch added patch discarded remove patch
@@ -21,1944 +21,1944 @@
 block discarded – undo
21 21
  */
22 22
 class NewFunctionsSniff extends AbstractNewFeatureSniff
23 23
 {
24
-    /**
25
-     * A list of new functions, not present in older versions.
26
-     *
27
-     * The array lists : version number with false (not present) or true (present).
28
-     * If's sufficient to list the first version where the function appears.
29
-     *
30
-     * @var array(string => array(string => int|string|null))
31
-     */
32
-    protected $newFunctions = array(
33
-        'iterator_count' => array(
34
-            '5.0' => false,
35
-            '5.1' => true,
36
-        ),
37
-        'iterator_to_array' => array(
38
-            '5.0' => false,
39
-            '5.1' => true,
40
-        ),
41
-        'spl_autoload_call' => array(
42
-            '5.0' => false,
43
-            '5.1' => true,
44
-        ),
45
-        'spl_autoload_extensions' => array(
46
-            '5.0' => false,
47
-            '5.1' => true,
48
-        ),
49
-        'spl_autoload_functions' => array(
50
-            '5.0' => false,
51
-            '5.1' => true,
52
-        ),
53
-        'spl_autoload_register' => array(
54
-            '5.0' => false,
55
-            '5.1' => true,
56
-        ),
57
-        'spl_autoload_unregister' => array(
58
-            '5.0' => false,
59
-            '5.1' => true,
60
-        ),
61
-        'spl_autoload' => array(
62
-            '5.0' => false,
63
-            '5.1' => true,
64
-        ),
65
-        'hash_hmac' => array(
66
-            '5.1.1' => false,
67
-            '5.1.2' => true,
68
-        ),
69
-        'array_fill_keys' => array(
70
-            '5.1' => false,
71
-            '5.2' => true,
72
-        ),
73
-        'error_get_last' => array(
74
-            '5.1' => false,
75
-            '5.2' => true,
76
-        ),
77
-        'image_type_to_extension' => array(
78
-            '5.1' => false,
79
-            '5.2' => true,
80
-        ),
81
-        'memory_get_peak_usage' => array(
82
-            '5.1' => false,
83
-            '5.2' => true,
84
-        ),
85
-        'sys_get_temp_dir' => array(
86
-            '5.1' => false,
87
-            '5.2' => true,
88
-        ),
89
-        'timezone_abbreviations_list' => array(
90
-            '5.1' => false,
91
-            '5.2' => true,
92
-        ),
93
-        'timezone_identifiers_list' => array(
94
-            '5.1' => false,
95
-            '5.2' => true,
96
-        ),
97
-        'timezone_name_from_abbr' => array(
98
-            '5.1' => false,
99
-            '5.2' => true,
100
-        ),
101
-        'stream_socket_shutdown' => array(
102
-            '5.1' => false,
103
-            '5.2' => true,
104
-        ),
105
-        'imagegrabscreen' => array(
106
-            '5.1' => false,
107
-            '5.2' => true,
108
-        ),
109
-        'imagegrabwindow' => array(
110
-            '5.1' => false,
111
-            '5.2' => true,
112
-        ),
113
-        'libxml_disable_entity_loader' => array(
114
-            '5.1' => false,
115
-            '5.2' => true,
116
-        ),
117
-        'mb_stripos' => array(
118
-            '5.1' => false,
119
-            '5.2' => true,
120
-        ),
121
-        'mb_stristr' => array(
122
-            '5.1' => false,
123
-            '5.2' => true,
124
-        ),
125
-        'mb_strrchr' => array(
126
-            '5.1' => false,
127
-            '5.2' => true,
128
-        ),
129
-        'mb_strrichr' => array(
130
-            '5.1' => false,
131
-            '5.2' => true,
132
-        ),
133
-        'mb_strripos' => array(
134
-            '5.1' => false,
135
-            '5.2' => true,
136
-        ),
137
-        'ming_setSWFCompression' => array(
138
-            '5.1' => false,
139
-            '5.2' => true,
140
-        ),
141
-        'openssl_csr_get_public_key' => array(
142
-            '5.1' => false,
143
-            '5.2' => true,
144
-        ),
145
-        'openssl_csr_get_subject' => array(
146
-            '5.1' => false,
147
-            '5.2' => true,
148
-        ),
149
-        'openssl_pkey_get_details' => array(
150
-            '5.1' => false,
151
-            '5.2' => true,
152
-        ),
153
-        'spl_object_hash' => array(
154
-            '5.1' => false,
155
-            '5.2' => true,
156
-        ),
157
-        'iterator_apply' => array(
158
-            '5.1' => false,
159
-            '5.2' => true,
160
-        ),
161
-        'preg_last_error' => array(
162
-            '5.1' => false,
163
-            '5.2' => true,
164
-        ),
165
-        'pg_field_table' => array(
166
-            '5.1' => false,
167
-            '5.2' => true,
168
-        ),
169
-        'posix_initgroups' => array(
170
-            '5.1' => false,
171
-            '5.2' => true,
172
-        ),
173
-        'gmp_nextprime' => array(
174
-            '5.1' => false,
175
-            '5.2' => true,
176
-        ),
177
-        'xmlwriter_full_end_element' => array(
178
-            '5.1' => false,
179
-            '5.2' => true,
180
-        ),
181
-        'xmlwriter_write_raw' => array(
182
-            '5.1' => false,
183
-            '5.2' => true,
184
-        ),
185
-        'xmlwriter_start_dtd_entity' => array(
186
-            '5.1' => false,
187
-            '5.2' => true,
188
-        ),
189
-        'xmlwriter_end_dtd_entity' => array(
190
-            '5.1' => false,
191
-            '5.2' => true,
192
-        ),
193
-        'xmlwriter_write_dtd_entity' => array(
194
-            '5.1' => false,
195
-            '5.2' => true,
196
-        ),
197
-        'filter_has_var' => array(
198
-            '5.1' => false,
199
-            '5.2' => true,
200
-        ),
201
-        'filter_id' => array(
202
-            '5.1' => false,
203
-            '5.2' => true,
204
-        ),
205
-        'filter_input_array' => array(
206
-            '5.1' => false,
207
-            '5.2' => true,
208
-        ),
209
-        'filter_input' => array(
210
-            '5.1' => false,
211
-            '5.2' => true,
212
-        ),
213
-        'filter_list' => array(
214
-            '5.1' => false,
215
-            '5.2' => true,
216
-        ),
217
-        'filter_var_array' => array(
218
-            '5.1' => false,
219
-            '5.2' => true,
220
-        ),
221
-        'filter_var' => array(
222
-            '5.1' => false,
223
-            '5.2' => true,
224
-        ),
225
-        'json_decode' => array(
226
-            '5.1' => false,
227
-            '5.2' => true,
228
-        ),
229
-        'json_encode' => array(
230
-            '5.1' => false,
231
-            '5.2' => true,
232
-        ),
233
-        'zip_close' => array(
234
-            '5.1' => false,
235
-            '5.2' => true,
236
-        ),
237
-        'zip_entry_close' => array(
238
-            '5.1' => false,
239
-            '5.2' => true,
240
-        ),
241
-        'zip_entry_compressedsize' => array(
242
-            '5.1' => false,
243
-            '5.2' => true,
244
-        ),
245
-        'zip_entry_compressionmethod' => array(
246
-            '5.1' => false,
247
-            '5.2' => true,
248
-        ),
249
-        'zip_entry_filesize' => array(
250
-            '5.1' => false,
251
-            '5.2' => true,
252
-        ),
253
-        'zip_entry_name' => array(
254
-            '5.1' => false,
255
-            '5.2' => true,
256
-        ),
257
-        'zip_entry_open' => array(
258
-            '5.1' => false,
259
-            '5.2' => true,
260
-        ),
261
-        'zip_entry_read' => array(
262
-            '5.1' => false,
263
-            '5.2' => true,
264
-        ),
265
-        'zip_open' => array(
266
-            '5.1' => false,
267
-            '5.2' => true,
268
-        ),
269
-        'zip_read' => array(
270
-            '5.1' => false,
271
-            '5.2' => true,
272
-        ),
24
+	/**
25
+	 * A list of new functions, not present in older versions.
26
+	 *
27
+	 * The array lists : version number with false (not present) or true (present).
28
+	 * If's sufficient to list the first version where the function appears.
29
+	 *
30
+	 * @var array(string => array(string => int|string|null))
31
+	 */
32
+	protected $newFunctions = array(
33
+		'iterator_count' => array(
34
+			'5.0' => false,
35
+			'5.1' => true,
36
+		),
37
+		'iterator_to_array' => array(
38
+			'5.0' => false,
39
+			'5.1' => true,
40
+		),
41
+		'spl_autoload_call' => array(
42
+			'5.0' => false,
43
+			'5.1' => true,
44
+		),
45
+		'spl_autoload_extensions' => array(
46
+			'5.0' => false,
47
+			'5.1' => true,
48
+		),
49
+		'spl_autoload_functions' => array(
50
+			'5.0' => false,
51
+			'5.1' => true,
52
+		),
53
+		'spl_autoload_register' => array(
54
+			'5.0' => false,
55
+			'5.1' => true,
56
+		),
57
+		'spl_autoload_unregister' => array(
58
+			'5.0' => false,
59
+			'5.1' => true,
60
+		),
61
+		'spl_autoload' => array(
62
+			'5.0' => false,
63
+			'5.1' => true,
64
+		),
65
+		'hash_hmac' => array(
66
+			'5.1.1' => false,
67
+			'5.1.2' => true,
68
+		),
69
+		'array_fill_keys' => array(
70
+			'5.1' => false,
71
+			'5.2' => true,
72
+		),
73
+		'error_get_last' => array(
74
+			'5.1' => false,
75
+			'5.2' => true,
76
+		),
77
+		'image_type_to_extension' => array(
78
+			'5.1' => false,
79
+			'5.2' => true,
80
+		),
81
+		'memory_get_peak_usage' => array(
82
+			'5.1' => false,
83
+			'5.2' => true,
84
+		),
85
+		'sys_get_temp_dir' => array(
86
+			'5.1' => false,
87
+			'5.2' => true,
88
+		),
89
+		'timezone_abbreviations_list' => array(
90
+			'5.1' => false,
91
+			'5.2' => true,
92
+		),
93
+		'timezone_identifiers_list' => array(
94
+			'5.1' => false,
95
+			'5.2' => true,
96
+		),
97
+		'timezone_name_from_abbr' => array(
98
+			'5.1' => false,
99
+			'5.2' => true,
100
+		),
101
+		'stream_socket_shutdown' => array(
102
+			'5.1' => false,
103
+			'5.2' => true,
104
+		),
105
+		'imagegrabscreen' => array(
106
+			'5.1' => false,
107
+			'5.2' => true,
108
+		),
109
+		'imagegrabwindow' => array(
110
+			'5.1' => false,
111
+			'5.2' => true,
112
+		),
113
+		'libxml_disable_entity_loader' => array(
114
+			'5.1' => false,
115
+			'5.2' => true,
116
+		),
117
+		'mb_stripos' => array(
118
+			'5.1' => false,
119
+			'5.2' => true,
120
+		),
121
+		'mb_stristr' => array(
122
+			'5.1' => false,
123
+			'5.2' => true,
124
+		),
125
+		'mb_strrchr' => array(
126
+			'5.1' => false,
127
+			'5.2' => true,
128
+		),
129
+		'mb_strrichr' => array(
130
+			'5.1' => false,
131
+			'5.2' => true,
132
+		),
133
+		'mb_strripos' => array(
134
+			'5.1' => false,
135
+			'5.2' => true,
136
+		),
137
+		'ming_setSWFCompression' => array(
138
+			'5.1' => false,
139
+			'5.2' => true,
140
+		),
141
+		'openssl_csr_get_public_key' => array(
142
+			'5.1' => false,
143
+			'5.2' => true,
144
+		),
145
+		'openssl_csr_get_subject' => array(
146
+			'5.1' => false,
147
+			'5.2' => true,
148
+		),
149
+		'openssl_pkey_get_details' => array(
150
+			'5.1' => false,
151
+			'5.2' => true,
152
+		),
153
+		'spl_object_hash' => array(
154
+			'5.1' => false,
155
+			'5.2' => true,
156
+		),
157
+		'iterator_apply' => array(
158
+			'5.1' => false,
159
+			'5.2' => true,
160
+		),
161
+		'preg_last_error' => array(
162
+			'5.1' => false,
163
+			'5.2' => true,
164
+		),
165
+		'pg_field_table' => array(
166
+			'5.1' => false,
167
+			'5.2' => true,
168
+		),
169
+		'posix_initgroups' => array(
170
+			'5.1' => false,
171
+			'5.2' => true,
172
+		),
173
+		'gmp_nextprime' => array(
174
+			'5.1' => false,
175
+			'5.2' => true,
176
+		),
177
+		'xmlwriter_full_end_element' => array(
178
+			'5.1' => false,
179
+			'5.2' => true,
180
+		),
181
+		'xmlwriter_write_raw' => array(
182
+			'5.1' => false,
183
+			'5.2' => true,
184
+		),
185
+		'xmlwriter_start_dtd_entity' => array(
186
+			'5.1' => false,
187
+			'5.2' => true,
188
+		),
189
+		'xmlwriter_end_dtd_entity' => array(
190
+			'5.1' => false,
191
+			'5.2' => true,
192
+		),
193
+		'xmlwriter_write_dtd_entity' => array(
194
+			'5.1' => false,
195
+			'5.2' => true,
196
+		),
197
+		'filter_has_var' => array(
198
+			'5.1' => false,
199
+			'5.2' => true,
200
+		),
201
+		'filter_id' => array(
202
+			'5.1' => false,
203
+			'5.2' => true,
204
+		),
205
+		'filter_input_array' => array(
206
+			'5.1' => false,
207
+			'5.2' => true,
208
+		),
209
+		'filter_input' => array(
210
+			'5.1' => false,
211
+			'5.2' => true,
212
+		),
213
+		'filter_list' => array(
214
+			'5.1' => false,
215
+			'5.2' => true,
216
+		),
217
+		'filter_var_array' => array(
218
+			'5.1' => false,
219
+			'5.2' => true,
220
+		),
221
+		'filter_var' => array(
222
+			'5.1' => false,
223
+			'5.2' => true,
224
+		),
225
+		'json_decode' => array(
226
+			'5.1' => false,
227
+			'5.2' => true,
228
+		),
229
+		'json_encode' => array(
230
+			'5.1' => false,
231
+			'5.2' => true,
232
+		),
233
+		'zip_close' => array(
234
+			'5.1' => false,
235
+			'5.2' => true,
236
+		),
237
+		'zip_entry_close' => array(
238
+			'5.1' => false,
239
+			'5.2' => true,
240
+		),
241
+		'zip_entry_compressedsize' => array(
242
+			'5.1' => false,
243
+			'5.2' => true,
244
+		),
245
+		'zip_entry_compressionmethod' => array(
246
+			'5.1' => false,
247
+			'5.2' => true,
248
+		),
249
+		'zip_entry_filesize' => array(
250
+			'5.1' => false,
251
+			'5.2' => true,
252
+		),
253
+		'zip_entry_name' => array(
254
+			'5.1' => false,
255
+			'5.2' => true,
256
+		),
257
+		'zip_entry_open' => array(
258
+			'5.1' => false,
259
+			'5.2' => true,
260
+		),
261
+		'zip_entry_read' => array(
262
+			'5.1' => false,
263
+			'5.2' => true,
264
+		),
265
+		'zip_open' => array(
266
+			'5.1' => false,
267
+			'5.2' => true,
268
+		),
269
+		'zip_read' => array(
270
+			'5.1' => false,
271
+			'5.2' => true,
272
+		),
273 273
 
274
-        'array_replace' => array(
275
-            '5.2' => false,
276
-            '5.3' => true,
277
-        ),
278
-        'array_replace_recursive' => array(
279
-            '5.2' => false,
280
-            '5.3' => true,
281
-        ),
282
-        'class_alias' => array(
283
-            '5.2' => false,
284
-            '5.3' => true,
285
-        ),
286
-        'forward_static_call' => array(
287
-            '5.2' => false,
288
-            '5.3' => true,
289
-        ),
290
-        'forward_static_call_array' => array(
291
-            '5.2' => false,
292
-            '5.3' => true,
293
-        ),
294
-        'gc_collect_cycles' => array(
295
-            '5.2' => false,
296
-            '5.3' => true,
297
-        ),
298
-        'gc_disable' => array(
299
-            '5.2' => false,
300
-            '5.3' => true,
301
-        ),
302
-        'gc_enable' => array(
303
-            '5.2' => false,
304
-            '5.3' => true,
305
-        ),
306
-        'gc_enabled' => array(
307
-            '5.2' => false,
308
-            '5.3' => true,
309
-        ),
310
-        'get_called_class' => array(
311
-            '5.2' => false,
312
-            '5.3' => true,
313
-        ),
314
-        'gethostname' => array(
315
-            '5.2' => false,
316
-            '5.3' => true,
317
-        ),
318
-        'header_remove' => array(
319
-            '5.2' => false,
320
-            '5.3' => true,
321
-        ),
322
-        'lcfirst' => array(
323
-            '5.2' => false,
324
-            '5.3' => true,
325
-        ),
326
-        'parse_ini_string' => array(
327
-            '5.2' => false,
328
-            '5.3' => true,
329
-        ),
330
-        'quoted_printable_encode' => array(
331
-            '5.2' => false,
332
-            '5.3' => true,
333
-        ),
334
-        'str_getcsv' => array(
335
-            '5.2' => false,
336
-            '5.3' => true,
337
-        ),
338
-        'stream_context_set_default' => array(
339
-            '5.2' => false,
340
-            '5.3' => true,
341
-        ),
342
-        'stream_supports_lock' => array(
343
-            '5.2' => false,
344
-            '5.3' => true,
345
-        ),
346
-        'stream_context_get_params' => array(
347
-            '5.2' => false,
348
-            '5.3' => true,
349
-        ),
350
-        'date_add' => array(
351
-            '5.2' => false,
352
-            '5.3' => true,
353
-        ),
354
-        'date_create_from_format' => array(
355
-            '5.2' => false,
356
-            '5.3' => true,
357
-        ),
358
-        'date_diff' => array(
359
-            '5.2' => false,
360
-            '5.3' => true,
361
-        ),
362
-        'date_get_last_errors' => array(
363
-            '5.2' => false,
364
-            '5.3' => true,
365
-        ),
366
-        'date_parse_from_format' => array(
367
-            '5.2' => false,
368
-            '5.3' => true,
369
-        ),
370
-        'date_sub' => array(
371
-            '5.2' => false,
372
-            '5.3' => true,
373
-        ),
374
-        'timezone_version_get' => array(
375
-            '5.2' => false,
376
-            '5.3' => true,
377
-        ),
378
-        'gmp_testbit' => array(
379
-            '5.2' => false,
380
-            '5.3' => true,
381
-        ),
382
-        'hash_copy' => array(
383
-            '5.2' => false,
384
-            '5.3' => true,
385
-        ),
386
-        'imap_gc' => array(
387
-            '5.2' => false,
388
-            '5.3' => true,
389
-        ),
390
-        'imap_utf8_to_mutf7' => array(
391
-            '5.2' => false,
392
-            '5.3' => true,
393
-        ),
394
-        'imap_mutf7_to_utf8' => array(
395
-            '5.2' => false,
396
-            '5.3' => true,
397
-        ),
398
-        'json_last_error' => array(
399
-            '5.2' => false,
400
-            '5.3' => true,
401
-        ),
402
-        'mysqli_get_cache_stats' => array(
403
-            '5.2' => false,
404
-            '5.3' => true,
405
-        ),
406
-        'mysqli_fetch_all' => array(
407
-            '5.2' => false,
408
-            '5.3' => true,
409
-        ),
410
-        'mysqli_get_connection_status' => array(
411
-            '5.2' => false,
412
-            '5.3' => true,
413
-        ),
414
-        'mysqli_poll' => array(
415
-            '5.2' => false,
416
-            '5.3' => true,
417
-        ),
418
-        'mysqli_read_async_query' => array(
419
-            '5.2' => false,
420
-            '5.3' => true,
421
-        ),
422
-        'openssl_random_pseudo_bytes' => array(
423
-            '5.2' => false,
424
-            '5.3' => true,
425
-        ),
426
-        'pcntl_signal_dispatch' => array(
427
-            '5.2' => false,
428
-            '5.3' => true,
429
-        ),
430
-        'pcntl_sigprocmask' => array(
431
-            '5.2' => false,
432
-            '5.3' => true,
433
-        ),
434
-        'pcntl_sigtimedwait' => array(
435
-            '5.2' => false,
436
-            '5.3' => true,
437
-        ),
438
-        'pcntl_sigwaitinfo' => array(
439
-            '5.2' => false,
440
-            '5.3' => true,
441
-        ),
442
-        'preg_filter' => array(
443
-            '5.2' => false,
444
-            '5.3' => true,
445
-        ),
446
-        'msg_queue_exists' => array(
447
-            '5.2' => false,
448
-            '5.3' => true,
449
-        ),
450
-        'shm_has_vars' => array(
451
-            '5.2' => false,
452
-            '5.3' => true,
453
-        ),
454
-        'acosh' => array(
455
-            '5.2' => false,
456
-            '5.3' => true,
457
-        ),
458
-        'asinh' => array(
459
-            '5.2' => false,
460
-            '5.3' => true,
461
-        ),
462
-        'atanh' => array(
463
-            '5.2' => false,
464
-            '5.3' => true,
465
-        ),
466
-        'expm1' => array(
467
-            '5.2' => false,
468
-            '5.3' => true,
469
-        ),
470
-        'log1p' => array(
471
-            '5.2' => false,
472
-            '5.3' => true,
473
-        ),
474
-        'enchant_broker_describe' => array(
475
-            '5.2' => false,
476
-            '5.3' => true,
477
-        ),
478
-        'enchant_broker_dict_exists' => array(
479
-            '5.2' => false,
480
-            '5.3' => true,
481
-        ),
482
-        'enchant_broker_free_dict' => array(
483
-            '5.2' => false,
484
-            '5.3' => true,
485
-        ),
486
-        'enchant_broker_free' => array(
487
-            '5.2' => false,
488
-            '5.3' => true,
489
-        ),
490
-        'enchant_broker_get_error' => array(
491
-            '5.2' => false,
492
-            '5.3' => true,
493
-        ),
494
-        'enchant_broker_init' => array(
495
-            '5.2' => false,
496
-            '5.3' => true,
497
-        ),
498
-        'enchant_broker_list_dicts' => array(
499
-            '5.2' => false,
500
-            '5.3' => true,
501
-        ),
502
-        'enchant_broker_request_dict' => array(
503
-            '5.2' => false,
504
-            '5.3' => true,
505
-        ),
506
-        'enchant_broker_request_pwl_dict' => array(
507
-            '5.2' => false,
508
-            '5.3' => true,
509
-        ),
510
-        'enchant_broker_set_ordering' => array(
511
-            '5.2' => false,
512
-            '5.3' => true,
513
-        ),
514
-        'enchant_dict_add_to_personal' => array(
515
-            '5.2' => false,
516
-            '5.3' => true,
517
-        ),
518
-        'enchant_dict_add_to_session' => array(
519
-            '5.2' => false,
520
-            '5.3' => true,
521
-        ),
522
-        'enchant_dict_check' => array(
523
-            '5.2' => false,
524
-            '5.3' => true,
525
-        ),
526
-        'enchant_dict_describe' => array(
527
-            '5.2' => false,
528
-            '5.3' => true,
529
-        ),
530
-        'enchant_dict_get_error' => array(
531
-            '5.2' => false,
532
-            '5.3' => true,
533
-        ),
534
-        'enchant_dict_is_in_session' => array(
535
-            '5.2' => false,
536
-            '5.3' => true,
537
-        ),
538
-        'enchant_dict_quick_check' => array(
539
-            '5.2' => false,
540
-            '5.3' => true,
541
-        ),
542
-        'enchant_dict_store_replacement' => array(
543
-            '5.2' => false,
544
-            '5.3' => true,
545
-        ),
546
-        'enchant_dict_suggest' => array(
547
-            '5.2' => false,
548
-            '5.3' => true,
549
-        ),
550
-        'finfo_buffer' => array(
551
-            '5.2' => false,
552
-            '5.3' => true,
553
-        ),
554
-        'finfo_close' => array(
555
-            '5.2' => false,
556
-            '5.3' => true,
557
-        ),
558
-        'finfo_file' => array(
559
-            '5.2' => false,
560
-            '5.3' => true,
561
-        ),
562
-        'finfo_open' => array(
563
-            '5.2' => false,
564
-            '5.3' => true,
565
-        ),
566
-        'finfo_set_flags' => array(
567
-            '5.2' => false,
568
-            '5.3' => true,
569
-        ),
570
-        'intl_error_name' => array(
571
-            '5.2' => false,
572
-            '5.3' => true,
573
-        ),
574
-        'intl_get_error_code' => array(
575
-            '5.2' => false,
576
-            '5.3' => true,
577
-        ),
578
-        'intl_get_error_message' => array(
579
-            '5.2' => false,
580
-            '5.3' => true,
581
-        ),
582
-        'intl_is_failure' => array(
583
-            '5.2' => false,
584
-            '5.3' => true,
585
-        ),
274
+		'array_replace' => array(
275
+			'5.2' => false,
276
+			'5.3' => true,
277
+		),
278
+		'array_replace_recursive' => array(
279
+			'5.2' => false,
280
+			'5.3' => true,
281
+		),
282
+		'class_alias' => array(
283
+			'5.2' => false,
284
+			'5.3' => true,
285
+		),
286
+		'forward_static_call' => array(
287
+			'5.2' => false,
288
+			'5.3' => true,
289
+		),
290
+		'forward_static_call_array' => array(
291
+			'5.2' => false,
292
+			'5.3' => true,
293
+		),
294
+		'gc_collect_cycles' => array(
295
+			'5.2' => false,
296
+			'5.3' => true,
297
+		),
298
+		'gc_disable' => array(
299
+			'5.2' => false,
300
+			'5.3' => true,
301
+		),
302
+		'gc_enable' => array(
303
+			'5.2' => false,
304
+			'5.3' => true,
305
+		),
306
+		'gc_enabled' => array(
307
+			'5.2' => false,
308
+			'5.3' => true,
309
+		),
310
+		'get_called_class' => array(
311
+			'5.2' => false,
312
+			'5.3' => true,
313
+		),
314
+		'gethostname' => array(
315
+			'5.2' => false,
316
+			'5.3' => true,
317
+		),
318
+		'header_remove' => array(
319
+			'5.2' => false,
320
+			'5.3' => true,
321
+		),
322
+		'lcfirst' => array(
323
+			'5.2' => false,
324
+			'5.3' => true,
325
+		),
326
+		'parse_ini_string' => array(
327
+			'5.2' => false,
328
+			'5.3' => true,
329
+		),
330
+		'quoted_printable_encode' => array(
331
+			'5.2' => false,
332
+			'5.3' => true,
333
+		),
334
+		'str_getcsv' => array(
335
+			'5.2' => false,
336
+			'5.3' => true,
337
+		),
338
+		'stream_context_set_default' => array(
339
+			'5.2' => false,
340
+			'5.3' => true,
341
+		),
342
+		'stream_supports_lock' => array(
343
+			'5.2' => false,
344
+			'5.3' => true,
345
+		),
346
+		'stream_context_get_params' => array(
347
+			'5.2' => false,
348
+			'5.3' => true,
349
+		),
350
+		'date_add' => array(
351
+			'5.2' => false,
352
+			'5.3' => true,
353
+		),
354
+		'date_create_from_format' => array(
355
+			'5.2' => false,
356
+			'5.3' => true,
357
+		),
358
+		'date_diff' => array(
359
+			'5.2' => false,
360
+			'5.3' => true,
361
+		),
362
+		'date_get_last_errors' => array(
363
+			'5.2' => false,
364
+			'5.3' => true,
365
+		),
366
+		'date_parse_from_format' => array(
367
+			'5.2' => false,
368
+			'5.3' => true,
369
+		),
370
+		'date_sub' => array(
371
+			'5.2' => false,
372
+			'5.3' => true,
373
+		),
374
+		'timezone_version_get' => array(
375
+			'5.2' => false,
376
+			'5.3' => true,
377
+		),
378
+		'gmp_testbit' => array(
379
+			'5.2' => false,
380
+			'5.3' => true,
381
+		),
382
+		'hash_copy' => array(
383
+			'5.2' => false,
384
+			'5.3' => true,
385
+		),
386
+		'imap_gc' => array(
387
+			'5.2' => false,
388
+			'5.3' => true,
389
+		),
390
+		'imap_utf8_to_mutf7' => array(
391
+			'5.2' => false,
392
+			'5.3' => true,
393
+		),
394
+		'imap_mutf7_to_utf8' => array(
395
+			'5.2' => false,
396
+			'5.3' => true,
397
+		),
398
+		'json_last_error' => array(
399
+			'5.2' => false,
400
+			'5.3' => true,
401
+		),
402
+		'mysqli_get_cache_stats' => array(
403
+			'5.2' => false,
404
+			'5.3' => true,
405
+		),
406
+		'mysqli_fetch_all' => array(
407
+			'5.2' => false,
408
+			'5.3' => true,
409
+		),
410
+		'mysqli_get_connection_status' => array(
411
+			'5.2' => false,
412
+			'5.3' => true,
413
+		),
414
+		'mysqli_poll' => array(
415
+			'5.2' => false,
416
+			'5.3' => true,
417
+		),
418
+		'mysqli_read_async_query' => array(
419
+			'5.2' => false,
420
+			'5.3' => true,
421
+		),
422
+		'openssl_random_pseudo_bytes' => array(
423
+			'5.2' => false,
424
+			'5.3' => true,
425
+		),
426
+		'pcntl_signal_dispatch' => array(
427
+			'5.2' => false,
428
+			'5.3' => true,
429
+		),
430
+		'pcntl_sigprocmask' => array(
431
+			'5.2' => false,
432
+			'5.3' => true,
433
+		),
434
+		'pcntl_sigtimedwait' => array(
435
+			'5.2' => false,
436
+			'5.3' => true,
437
+		),
438
+		'pcntl_sigwaitinfo' => array(
439
+			'5.2' => false,
440
+			'5.3' => true,
441
+		),
442
+		'preg_filter' => array(
443
+			'5.2' => false,
444
+			'5.3' => true,
445
+		),
446
+		'msg_queue_exists' => array(
447
+			'5.2' => false,
448
+			'5.3' => true,
449
+		),
450
+		'shm_has_vars' => array(
451
+			'5.2' => false,
452
+			'5.3' => true,
453
+		),
454
+		'acosh' => array(
455
+			'5.2' => false,
456
+			'5.3' => true,
457
+		),
458
+		'asinh' => array(
459
+			'5.2' => false,
460
+			'5.3' => true,
461
+		),
462
+		'atanh' => array(
463
+			'5.2' => false,
464
+			'5.3' => true,
465
+		),
466
+		'expm1' => array(
467
+			'5.2' => false,
468
+			'5.3' => true,
469
+		),
470
+		'log1p' => array(
471
+			'5.2' => false,
472
+			'5.3' => true,
473
+		),
474
+		'enchant_broker_describe' => array(
475
+			'5.2' => false,
476
+			'5.3' => true,
477
+		),
478
+		'enchant_broker_dict_exists' => array(
479
+			'5.2' => false,
480
+			'5.3' => true,
481
+		),
482
+		'enchant_broker_free_dict' => array(
483
+			'5.2' => false,
484
+			'5.3' => true,
485
+		),
486
+		'enchant_broker_free' => array(
487
+			'5.2' => false,
488
+			'5.3' => true,
489
+		),
490
+		'enchant_broker_get_error' => array(
491
+			'5.2' => false,
492
+			'5.3' => true,
493
+		),
494
+		'enchant_broker_init' => array(
495
+			'5.2' => false,
496
+			'5.3' => true,
497
+		),
498
+		'enchant_broker_list_dicts' => array(
499
+			'5.2' => false,
500
+			'5.3' => true,
501
+		),
502
+		'enchant_broker_request_dict' => array(
503
+			'5.2' => false,
504
+			'5.3' => true,
505
+		),
506
+		'enchant_broker_request_pwl_dict' => array(
507
+			'5.2' => false,
508
+			'5.3' => true,
509
+		),
510
+		'enchant_broker_set_ordering' => array(
511
+			'5.2' => false,
512
+			'5.3' => true,
513
+		),
514
+		'enchant_dict_add_to_personal' => array(
515
+			'5.2' => false,
516
+			'5.3' => true,
517
+		),
518
+		'enchant_dict_add_to_session' => array(
519
+			'5.2' => false,
520
+			'5.3' => true,
521
+		),
522
+		'enchant_dict_check' => array(
523
+			'5.2' => false,
524
+			'5.3' => true,
525
+		),
526
+		'enchant_dict_describe' => array(
527
+			'5.2' => false,
528
+			'5.3' => true,
529
+		),
530
+		'enchant_dict_get_error' => array(
531
+			'5.2' => false,
532
+			'5.3' => true,
533
+		),
534
+		'enchant_dict_is_in_session' => array(
535
+			'5.2' => false,
536
+			'5.3' => true,
537
+		),
538
+		'enchant_dict_quick_check' => array(
539
+			'5.2' => false,
540
+			'5.3' => true,
541
+		),
542
+		'enchant_dict_store_replacement' => array(
543
+			'5.2' => false,
544
+			'5.3' => true,
545
+		),
546
+		'enchant_dict_suggest' => array(
547
+			'5.2' => false,
548
+			'5.3' => true,
549
+		),
550
+		'finfo_buffer' => array(
551
+			'5.2' => false,
552
+			'5.3' => true,
553
+		),
554
+		'finfo_close' => array(
555
+			'5.2' => false,
556
+			'5.3' => true,
557
+		),
558
+		'finfo_file' => array(
559
+			'5.2' => false,
560
+			'5.3' => true,
561
+		),
562
+		'finfo_open' => array(
563
+			'5.2' => false,
564
+			'5.3' => true,
565
+		),
566
+		'finfo_set_flags' => array(
567
+			'5.2' => false,
568
+			'5.3' => true,
569
+		),
570
+		'intl_error_name' => array(
571
+			'5.2' => false,
572
+			'5.3' => true,
573
+		),
574
+		'intl_get_error_code' => array(
575
+			'5.2' => false,
576
+			'5.3' => true,
577
+		),
578
+		'intl_get_error_message' => array(
579
+			'5.2' => false,
580
+			'5.3' => true,
581
+		),
582
+		'intl_is_failure' => array(
583
+			'5.2' => false,
584
+			'5.3' => true,
585
+		),
586 586
 
587
-        'hex2bin' => array(
588
-            '5.3' => false,
589
-            '5.4' => true,
590
-        ),
591
-        'http_response_code' => array(
592
-            '5.3' => false,
593
-            '5.4' => true,
594
-        ),
595
-        'get_declared_traits' => array(
596
-            '5.3' => false,
597
-            '5.4' => true,
598
-        ),
599
-        'getimagesizefromstring' => array(
600
-            '5.3' => false,
601
-            '5.4' => true,
602
-        ),
603
-        'stream_set_chunk_size' => array(
604
-            '5.3' => false,
605
-            '5.4' => true,
606
-        ),
607
-        'socket_import_stream' => array(
608
-            '5.3' => false,
609
-            '5.4' => true,
610
-        ),
611
-        'trait_exists' => array(
612
-            '5.3' => false,
613
-            '5.4' => true,
614
-        ),
615
-        'header_register_callback' => array(
616
-            '5.3' => false,
617
-            '5.4' => true,
618
-        ),
619
-        'class_uses' => array(
620
-            '5.3' => false,
621
-            '5.4' => true,
622
-        ),
623
-        'session_status' => array(
624
-            '5.3' => false,
625
-            '5.4' => true,
626
-        ),
627
-        'session_register_shutdown' => array(
628
-            '5.3' => false,
629
-            '5.4' => true,
630
-        ),
631
-        'mysqli_error_list' => array(
632
-            '5.3' => false,
633
-            '5.4' => true,
634
-        ),
635
-        'mysqli_stmt_error_list' => array(
636
-            '5.3' => false,
637
-            '5.4' => true,
638
-        ),
639
-        'libxml_set_external_entity_loader' => array(
640
-            '5.3' => false,
641
-            '5.4' => true,
642
-        ),
643
-        'ldap_control_paged_result' => array(
644
-            '5.3' => false,
645
-            '5.4' => true,
646
-        ),
647
-        'ldap_control_paged_result_response' => array(
648
-            '5.3' => false,
649
-            '5.4' => true,
650
-        ),
651
-        'transliteral_create' => array(
652
-            '5.3' => false,
653
-            '5.4' => true,
654
-        ),
655
-        'transliteral_create_from_rules' => array(
656
-            '5.3' => false,
657
-            '5.4' => true,
658
-        ),
659
-        'transliteral_create_inverse' => array(
660
-            '5.3' => false,
661
-            '5.4' => true,
662
-        ),
663
-        'transliteral_get_error_code' => array(
664
-            '5.3' => false,
665
-            '5.4' => true,
666
-        ),
667
-        'transliteral_get_error_message' => array(
668
-            '5.3' => false,
669
-            '5.4' => true,
670
-        ),
671
-        'transliteral_list_ids' => array(
672
-            '5.3' => false,
673
-            '5.4' => true,
674
-        ),
675
-        'transliteral_transliterate' => array(
676
-            '5.3' => false,
677
-            '5.4' => true,
678
-        ),
679
-        'zlib_decode' => array(
680
-            '5.3' => false,
681
-            '5.4' => true,
682
-        ),
683
-        'zlib_encode' => array(
684
-            '5.3' => false,
685
-            '5.4' => true,
686
-        ),
587
+		'hex2bin' => array(
588
+			'5.3' => false,
589
+			'5.4' => true,
590
+		),
591
+		'http_response_code' => array(
592
+			'5.3' => false,
593
+			'5.4' => true,
594
+		),
595
+		'get_declared_traits' => array(
596
+			'5.3' => false,
597
+			'5.4' => true,
598
+		),
599
+		'getimagesizefromstring' => array(
600
+			'5.3' => false,
601
+			'5.4' => true,
602
+		),
603
+		'stream_set_chunk_size' => array(
604
+			'5.3' => false,
605
+			'5.4' => true,
606
+		),
607
+		'socket_import_stream' => array(
608
+			'5.3' => false,
609
+			'5.4' => true,
610
+		),
611
+		'trait_exists' => array(
612
+			'5.3' => false,
613
+			'5.4' => true,
614
+		),
615
+		'header_register_callback' => array(
616
+			'5.3' => false,
617
+			'5.4' => true,
618
+		),
619
+		'class_uses' => array(
620
+			'5.3' => false,
621
+			'5.4' => true,
622
+		),
623
+		'session_status' => array(
624
+			'5.3' => false,
625
+			'5.4' => true,
626
+		),
627
+		'session_register_shutdown' => array(
628
+			'5.3' => false,
629
+			'5.4' => true,
630
+		),
631
+		'mysqli_error_list' => array(
632
+			'5.3' => false,
633
+			'5.4' => true,
634
+		),
635
+		'mysqli_stmt_error_list' => array(
636
+			'5.3' => false,
637
+			'5.4' => true,
638
+		),
639
+		'libxml_set_external_entity_loader' => array(
640
+			'5.3' => false,
641
+			'5.4' => true,
642
+		),
643
+		'ldap_control_paged_result' => array(
644
+			'5.3' => false,
645
+			'5.4' => true,
646
+		),
647
+		'ldap_control_paged_result_response' => array(
648
+			'5.3' => false,
649
+			'5.4' => true,
650
+		),
651
+		'transliteral_create' => array(
652
+			'5.3' => false,
653
+			'5.4' => true,
654
+		),
655
+		'transliteral_create_from_rules' => array(
656
+			'5.3' => false,
657
+			'5.4' => true,
658
+		),
659
+		'transliteral_create_inverse' => array(
660
+			'5.3' => false,
661
+			'5.4' => true,
662
+		),
663
+		'transliteral_get_error_code' => array(
664
+			'5.3' => false,
665
+			'5.4' => true,
666
+		),
667
+		'transliteral_get_error_message' => array(
668
+			'5.3' => false,
669
+			'5.4' => true,
670
+		),
671
+		'transliteral_list_ids' => array(
672
+			'5.3' => false,
673
+			'5.4' => true,
674
+		),
675
+		'transliteral_transliterate' => array(
676
+			'5.3' => false,
677
+			'5.4' => true,
678
+		),
679
+		'zlib_decode' => array(
680
+			'5.3' => false,
681
+			'5.4' => true,
682
+		),
683
+		'zlib_encode' => array(
684
+			'5.3' => false,
685
+			'5.4' => true,
686
+		),
687 687
 
688
-        'array_column' => array(
689
-            '5.4' => false,
690
-            '5.5' => true,
691
-        ),
692
-        'boolval' => array(
693
-            '5.4' => false,
694
-            '5.5' => true,
695
-        ),
696
-        'json_last_error_msg' => array(
697
-            '5.4' => false,
698
-            '5.5' => true,
699
-        ),
700
-        'password_get_info' => array(
701
-            '5.4' => false,
702
-            '5.5' => true,
703
-        ),
704
-        'password_hash' => array(
705
-            '5.4' => false,
706
-            '5.5' => true,
707
-        ),
708
-        'password_needs_rehash' => array(
709
-            '5.4' => false,
710
-            '5.5' => true,
711
-        ),
712
-        'password_verify' => array(
713
-            '5.4' => false,
714
-            '5.5' => true,
715
-        ),
716
-        'hash_pbkdf2' => array(
717
-            '5.4' => false,
718
-            '5.5' => true,
719
-        ),
720
-        'openssl_pbkdf2' => array(
721
-            '5.4' => false,
722
-            '5.5' => true,
723
-        ),
724
-        'curl_escape' => array(
725
-            '5.4' => false,
726
-            '5.5' => true,
727
-        ),
728
-        'curl_file_create' => array(
729
-            '5.4' => false,
730
-            '5.5' => true,
731
-        ),
732
-        'curl_multi_setopt' => array(
733
-            '5.4' => false,
734
-            '5.5' => true,
735
-        ),
736
-        'curl_multi_strerror' => array(
737
-            '5.4' => false,
738
-            '5.5' => true,
739
-        ),
740
-        'curl_pause' => array(
741
-            '5.4' => false,
742
-            '5.5' => true,
743
-        ),
744
-        'curl_reset' => array(
745
-            '5.4' => false,
746
-            '5.5' => true,
747
-        ),
748
-        'curl_share_close' => array(
749
-            '5.4' => false,
750
-            '5.5' => true,
751
-        ),
752
-        'curl_share_init' => array(
753
-            '5.4' => false,
754
-            '5.5' => true,
755
-        ),
756
-        'curl_share_setopt' => array(
757
-            '5.4' => false,
758
-            '5.5' => true,
759
-        ),
760
-        'curl_strerror' => array(
761
-            '5.4' => false,
762
-            '5.5' => true,
763
-        ),
764
-        'curl_unescape' => array(
765
-            '5.4' => false,
766
-            '5.5' => true,
767
-        ),
768
-        'imageaffinematrixconcat' => array(
769
-            '5.4' => false,
770
-            '5.5' => true,
771
-        ),
772
-        'imageaffinematrixget' => array(
773
-            '5.4' => false,
774
-            '5.5' => true,
775
-        ),
776
-        'imagecrop' => array(
777
-            '5.4' => false,
778
-            '5.5' => true,
779
-        ),
780
-        'imagecropauto' => array(
781
-            '5.4' => false,
782
-            '5.5' => true,
783
-        ),
784
-        'imageflip' => array(
785
-            '5.4' => false,
786
-            '5.5' => true,
787
-        ),
788
-        'imagepalettetotruecolor' => array(
789
-            '5.4' => false,
790
-            '5.5' => true,
791
-        ),
792
-        'imagescale' => array(
793
-            '5.4' => false,
794
-            '5.5' => true,
795
-        ),
796
-        'mysqli_begin_transaction' => array(
797
-            '5.4' => false,
798
-            '5.5' => true,
799
-        ),
800
-        'mysqli_release_savepoint' => array(
801
-            '5.4' => false,
802
-            '5.5' => true,
803
-        ),
804
-        'mysqli_savepoint' => array(
805
-            '5.4' => false,
806
-            '5.5' => true,
807
-        ),
808
-        'pg_escape_literal' => array(
809
-            '5.4' => false,
810
-            '5.5' => true,
811
-        ),
812
-        'pg_escape_identifier' => array(
813
-            '5.4' => false,
814
-            '5.5' => true,
815
-        ),
816
-        'socket_sendmsg' => array(
817
-            '5.4' => false,
818
-            '5.5' => true,
819
-        ),
820
-        'socket_recvmsg' => array(
821
-            '5.4' => false,
822
-            '5.5' => true,
823
-        ),
824
-        'socket_cmsg_space' => array(
825
-            '5.4' => false,
826
-            '5.5' => true,
827
-        ),
828
-        'cli_get_process_title' => array(
829
-            '5.4' => false,
830
-            '5.5' => true,
831
-        ),
832
-        'cli_set_process_title' => array(
833
-            '5.4' => false,
834
-            '5.5' => true,
835
-        ),
836
-        'datefmt_format_object' => array(
837
-            '5.4' => false,
838
-            '5.5' => true,
839
-        ),
840
-        'datefmt_get_calendar_object' => array(
841
-            '5.4' => false,
842
-            '5.5' => true,
843
-        ),
844
-        'datefmt_get_timezone' => array(
845
-            '5.4' => false,
846
-            '5.5' => true,
847
-        ),
848
-        'datefmt_set_timezone' => array(
849
-            '5.4' => false,
850
-            '5.5' => true,
851
-        ),
852
-        'datefmt_get_calendar_object' => array(
853
-            '5.4' => false,
854
-            '5.5' => true,
855
-        ),
856
-        'intlcal_create_instance' => array(
857
-            '5.4' => false,
858
-            '5.5' => true,
859
-        ),
860
-        'intlcal_get_keyword_values_for_locale' => array(
861
-            '5.4' => false,
862
-            '5.5' => true,
863
-        ),
864
-        'intlcal_get_now' => array(
865
-            '5.4' => false,
866
-            '5.5' => true,
867
-        ),
868
-        'intlcal_get_available_locales' => array(
869
-            '5.4' => false,
870
-            '5.5' => true,
871
-        ),
872
-        'intlcal_get' => array(
873
-            '5.4' => false,
874
-            '5.5' => true,
875
-        ),
876
-        'intlcal_get_time' => array(
877
-            '5.4' => false,
878
-            '5.5' => true,
879
-        ),
880
-        'intlcal_set_time' => array(
881
-            '5.4' => false,
882
-            '5.5' => true,
883
-        ),
884
-        'intlcal_add' => array(
885
-            '5.4' => false,
886
-            '5.5' => true,
887
-        ),
888
-        'intlcal_set_time_zone' => array(
889
-            '5.4' => false,
890
-            '5.5' => true,
891
-        ),
892
-        'intlcal_after' => array(
893
-            '5.4' => false,
894
-            '5.5' => true,
895
-        ),
896
-        'intlcal_before' => array(
897
-            '5.4' => false,
898
-            '5.5' => true,
899
-        ),
900
-        'intlcal_set' => array(
901
-            '5.4' => false,
902
-            '5.5' => true,
903
-        ),
904
-        'intlcal_roll' => array(
905
-            '5.4' => false,
906
-            '5.5' => true,
907
-        ),
908
-        'intlcal_clear' => array(
909
-            '5.4' => false,
910
-            '5.5' => true,
911
-        ),
912
-        'intlcal_field_difference' => array(
913
-            '5.4' => false,
914
-            '5.5' => true,
915
-        ),
916
-        'intlcal_get_actual_maximum' => array(
917
-            '5.4' => false,
918
-            '5.5' => true,
919
-        ),
920
-        'intlcal_get_actual_minumum' => array(
921
-            '5.4' => false,
922
-            '5.5' => true,
923
-        ),
924
-        'intlcal_get_day_of_week_type' => array(
925
-            '5.4' => false,
926
-            '5.5' => true,
927
-        ),
928
-        'intlcal_get_first_day_of_week' => array(
929
-            '5.4' => false,
930
-            '5.5' => true,
931
-        ),
932
-        'intlcal_get_greatest_minimum' => array(
933
-            '5.4' => false,
934
-            '5.5' => true,
935
-        ),
936
-        'intlcal_get_least_maximum' => array(
937
-            '5.4' => false,
938
-            '5.5' => true,
939
-        ),
940
-        'intlcal_get_locale' => array(
941
-            '5.4' => false,
942
-            '5.5' => true,
943
-        ),
944
-        'intlcal_get_maximum' => array(
945
-            '5.4' => false,
946
-            '5.5' => true,
947
-        ),
948
-        'intlcal_get_minimal_days_in_first_week' => array(
949
-            '5.4' => false,
950
-            '5.5' => true,
951
-        ),
952
-        'intlcal_get_minimum' => array(
953
-            '5.4' => false,
954
-            '5.5' => true,
955
-        ),
956
-        'intlcal_get_time_zone' => array(
957
-            '5.4' => false,
958
-            '5.5' => true,
959
-        ),
960
-        'intlcal_get_type' => array(
961
-            '5.4' => false,
962
-            '5.5' => true,
963
-        ),
964
-        'intlcal_get_weekend_transition' => array(
965
-            '5.4' => false,
966
-            '5.5' => true,
967
-        ),
968
-        'intlcal_in_daylight_time' => array(
969
-            '5.4' => false,
970
-            '5.5' => true,
971
-        ),
972
-        'intlcal_is_equivalent_to' => array(
973
-            '5.4' => false,
974
-            '5.5' => true,
975
-        ),
976
-        'intlcal_is_lenient' => array(
977
-            '5.4' => false,
978
-            '5.5' => true,
979
-        ),
980
-        'intlcal_equals' => array(
981
-            '5.4' => false,
982
-            '5.5' => true,
983
-        ),
984
-        'intlcal_get_repeated_wall_time_option' => array(
985
-            '5.4' => false,
986
-            '5.5' => true,
987
-        ),
988
-        'intlcal_get_skipped_wall_time_option' => array(
989
-            '5.4' => false,
990
-            '5.5' => true,
991
-        ),
992
-        'intlcal_set_repeated_wall_time_option' => array(
993
-            '5.4' => false,
994
-            '5.5' => true,
995
-        ),
996
-        'intlcal_set_skipped_wall_time_option' => array(
997
-            '5.4' => false,
998
-            '5.5' => true,
999
-        ),
1000
-        'intlcal_from_date_time' => array(
1001
-            '5.4' => false,
1002
-            '5.5' => true,
1003
-        ),
1004
-        'intlcal_to_date_time' => array(
1005
-            '5.4' => false,
1006
-            '5.5' => true,
1007
-        ),
1008
-        'intlcal_get_error_code' => array(
1009
-            '5.4' => false,
1010
-            '5.5' => true,
1011
-        ),
1012
-        'intlcal_get_error_message' => array(
1013
-            '5.4' => false,
1014
-            '5.5' => true,
1015
-        ),
1016
-        'intlgregcal_create_instance' => array(
1017
-            '5.4' => false,
1018
-            '5.5' => true,
1019
-        ),
1020
-        'intlgregcal_set_gregorian_change' => array(
1021
-            '5.4' => false,
1022
-            '5.5' => true,
1023
-        ),
1024
-        'intlgregcal_get_gregorian_change' => array(
1025
-            '5.4' => false,
1026
-            '5.5' => true,
1027
-        ),
1028
-        'intlgregcal_is_leap_year' => array(
1029
-            '5.4' => false,
1030
-            '5.5' => true,
1031
-        ),
1032
-        'intlz_create_time_zone' => array(
1033
-            '5.4' => false,
1034
-            '5.5' => true,
1035
-        ),
1036
-        'intlz_create_default' => array(
1037
-            '5.4' => false,
1038
-            '5.5' => true,
1039
-        ),
1040
-        'intlz_get_id' => array(
1041
-            '5.4' => false,
1042
-            '5.5' => true,
1043
-        ),
1044
-        'intlz_get_gmt' => array(
1045
-            '5.4' => false,
1046
-            '5.5' => true,
1047
-        ),
1048
-        'intlz_get_unknown' => array(
1049
-            '5.4' => false,
1050
-            '5.5' => true,
1051
-        ),
1052
-        'intlz_create_enumeration' => array(
1053
-            '5.4' => false,
1054
-            '5.5' => true,
1055
-        ),
1056
-        'intlz_count_equivalent_ids' => array(
1057
-            '5.4' => false,
1058
-            '5.5' => true,
1059
-        ),
1060
-        'intlz_create_time_zone_id_enumeration' => array(
1061
-            '5.4' => false,
1062
-            '5.5' => true,
1063
-        ),
1064
-        'intlz_get_canonical_id' => array(
1065
-            '5.4' => false,
1066
-            '5.5' => true,
1067
-        ),
1068
-        'intlz_get_region' => array(
1069
-            '5.4' => false,
1070
-            '5.5' => true,
1071
-        ),
1072
-        'intlz_get_tz_data_version' => array(
1073
-            '5.4' => false,
1074
-            '5.5' => true,
1075
-        ),
1076
-        'intlz_get_equivalent_id' => array(
1077
-            '5.4' => false,
1078
-            '5.5' => true,
1079
-        ),
1080
-        'intlz_use_daylight_time' => array(
1081
-            '5.4' => false,
1082
-            '5.5' => true,
1083
-        ),
1084
-        'intlz_get_offset' => array(
1085
-            '5.4' => false,
1086
-            '5.5' => true,
1087
-        ),
1088
-        'intlz_get_raw_offset' => array(
1089
-            '5.4' => false,
1090
-            '5.5' => true,
1091
-        ),
1092
-        'intlz_has_same_rules' => array(
1093
-            '5.4' => false,
1094
-            '5.5' => true,
1095
-        ),
1096
-        'intlz_get_display_name' => array(
1097
-            '5.4' => false,
1098
-            '5.5' => true,
1099
-        ),
1100
-        'intlz_get_dst_savings' => array(
1101
-            '5.4' => false,
1102
-            '5.5' => true,
1103
-        ),
1104
-        'intlz_from_date_time_zone' => array(
1105
-            '5.4' => false,
1106
-            '5.5' => true,
1107
-        ),
1108
-        'intlz_to_date_time_zone' => array(
1109
-            '5.4' => false,
1110
-            '5.5' => true,
1111
-        ),
1112
-        'intlz_get_error_code' => array(
1113
-            '5.4' => false,
1114
-            '5.5' => true,
1115
-        ),
1116
-        'intlz_get_error_message' => array(
1117
-            '5.4' => false,
1118
-            '5.5' => true,
1119
-        ),
688
+		'array_column' => array(
689
+			'5.4' => false,
690
+			'5.5' => true,
691
+		),
692
+		'boolval' => array(
693
+			'5.4' => false,
694
+			'5.5' => true,
695
+		),
696
+		'json_last_error_msg' => array(
697
+			'5.4' => false,
698
+			'5.5' => true,
699
+		),
700
+		'password_get_info' => array(
701
+			'5.4' => false,
702
+			'5.5' => true,
703
+		),
704
+		'password_hash' => array(
705
+			'5.4' => false,
706
+			'5.5' => true,
707
+		),
708
+		'password_needs_rehash' => array(
709
+			'5.4' => false,
710
+			'5.5' => true,
711
+		),
712
+		'password_verify' => array(
713
+			'5.4' => false,
714
+			'5.5' => true,
715
+		),
716
+		'hash_pbkdf2' => array(
717
+			'5.4' => false,
718
+			'5.5' => true,
719
+		),
720
+		'openssl_pbkdf2' => array(
721
+			'5.4' => false,
722
+			'5.5' => true,
723
+		),
724
+		'curl_escape' => array(
725
+			'5.4' => false,
726
+			'5.5' => true,
727
+		),
728
+		'curl_file_create' => array(
729
+			'5.4' => false,
730
+			'5.5' => true,
731
+		),
732
+		'curl_multi_setopt' => array(
733
+			'5.4' => false,
734
+			'5.5' => true,
735
+		),
736
+		'curl_multi_strerror' => array(
737
+			'5.4' => false,
738
+			'5.5' => true,
739
+		),
740
+		'curl_pause' => array(
741
+			'5.4' => false,
742
+			'5.5' => true,
743
+		),
744
+		'curl_reset' => array(
745
+			'5.4' => false,
746
+			'5.5' => true,
747
+		),
748
+		'curl_share_close' => array(
749
+			'5.4' => false,
750
+			'5.5' => true,
751
+		),
752
+		'curl_share_init' => array(
753
+			'5.4' => false,
754
+			'5.5' => true,
755
+		),
756
+		'curl_share_setopt' => array(
757
+			'5.4' => false,
758
+			'5.5' => true,
759
+		),
760
+		'curl_strerror' => array(
761
+			'5.4' => false,
762
+			'5.5' => true,
763
+		),
764
+		'curl_unescape' => array(
765
+			'5.4' => false,
766
+			'5.5' => true,
767
+		),
768
+		'imageaffinematrixconcat' => array(
769
+			'5.4' => false,
770
+			'5.5' => true,
771
+		),
772
+		'imageaffinematrixget' => array(
773
+			'5.4' => false,
774
+			'5.5' => true,
775
+		),
776
+		'imagecrop' => array(
777
+			'5.4' => false,
778
+			'5.5' => true,
779
+		),
780
+		'imagecropauto' => array(
781
+			'5.4' => false,
782
+			'5.5' => true,
783
+		),
784
+		'imageflip' => array(
785
+			'5.4' => false,
786
+			'5.5' => true,
787
+		),
788
+		'imagepalettetotruecolor' => array(
789
+			'5.4' => false,
790
+			'5.5' => true,
791
+		),
792
+		'imagescale' => array(
793
+			'5.4' => false,
794
+			'5.5' => true,
795
+		),
796
+		'mysqli_begin_transaction' => array(
797
+			'5.4' => false,
798
+			'5.5' => true,
799
+		),
800
+		'mysqli_release_savepoint' => array(
801
+			'5.4' => false,
802
+			'5.5' => true,
803
+		),
804
+		'mysqli_savepoint' => array(
805
+			'5.4' => false,
806
+			'5.5' => true,
807
+		),
808
+		'pg_escape_literal' => array(
809
+			'5.4' => false,
810
+			'5.5' => true,
811
+		),
812
+		'pg_escape_identifier' => array(
813
+			'5.4' => false,
814
+			'5.5' => true,
815
+		),
816
+		'socket_sendmsg' => array(
817
+			'5.4' => false,
818
+			'5.5' => true,
819
+		),
820
+		'socket_recvmsg' => array(
821
+			'5.4' => false,
822
+			'5.5' => true,
823
+		),
824
+		'socket_cmsg_space' => array(
825
+			'5.4' => false,
826
+			'5.5' => true,
827
+		),
828
+		'cli_get_process_title' => array(
829
+			'5.4' => false,
830
+			'5.5' => true,
831
+		),
832
+		'cli_set_process_title' => array(
833
+			'5.4' => false,
834
+			'5.5' => true,
835
+		),
836
+		'datefmt_format_object' => array(
837
+			'5.4' => false,
838
+			'5.5' => true,
839
+		),
840
+		'datefmt_get_calendar_object' => array(
841
+			'5.4' => false,
842
+			'5.5' => true,
843
+		),
844
+		'datefmt_get_timezone' => array(
845
+			'5.4' => false,
846
+			'5.5' => true,
847
+		),
848
+		'datefmt_set_timezone' => array(
849
+			'5.4' => false,
850
+			'5.5' => true,
851
+		),
852
+		'datefmt_get_calendar_object' => array(
853
+			'5.4' => false,
854
+			'5.5' => true,
855
+		),
856
+		'intlcal_create_instance' => array(
857
+			'5.4' => false,
858
+			'5.5' => true,
859
+		),
860
+		'intlcal_get_keyword_values_for_locale' => array(
861
+			'5.4' => false,
862
+			'5.5' => true,
863
+		),
864
+		'intlcal_get_now' => array(
865
+			'5.4' => false,
866
+			'5.5' => true,
867
+		),
868
+		'intlcal_get_available_locales' => array(
869
+			'5.4' => false,
870
+			'5.5' => true,
871
+		),
872
+		'intlcal_get' => array(
873
+			'5.4' => false,
874
+			'5.5' => true,
875
+		),
876
+		'intlcal_get_time' => array(
877
+			'5.4' => false,
878
+			'5.5' => true,
879
+		),
880
+		'intlcal_set_time' => array(
881
+			'5.4' => false,
882
+			'5.5' => true,
883
+		),
884
+		'intlcal_add' => array(
885
+			'5.4' => false,
886
+			'5.5' => true,
887
+		),
888
+		'intlcal_set_time_zone' => array(
889
+			'5.4' => false,
890
+			'5.5' => true,
891
+		),
892
+		'intlcal_after' => array(
893
+			'5.4' => false,
894
+			'5.5' => true,
895
+		),
896
+		'intlcal_before' => array(
897
+			'5.4' => false,
898
+			'5.5' => true,
899
+		),
900
+		'intlcal_set' => array(
901
+			'5.4' => false,
902
+			'5.5' => true,
903
+		),
904
+		'intlcal_roll' => array(
905
+			'5.4' => false,
906
+			'5.5' => true,
907
+		),
908
+		'intlcal_clear' => array(
909
+			'5.4' => false,
910
+			'5.5' => true,
911
+		),
912
+		'intlcal_field_difference' => array(
913
+			'5.4' => false,
914
+			'5.5' => true,
915
+		),
916
+		'intlcal_get_actual_maximum' => array(
917
+			'5.4' => false,
918
+			'5.5' => true,
919
+		),
920
+		'intlcal_get_actual_minumum' => array(
921
+			'5.4' => false,
922
+			'5.5' => true,
923
+		),
924
+		'intlcal_get_day_of_week_type' => array(
925
+			'5.4' => false,
926
+			'5.5' => true,
927
+		),
928
+		'intlcal_get_first_day_of_week' => array(
929
+			'5.4' => false,
930
+			'5.5' => true,
931
+		),
932
+		'intlcal_get_greatest_minimum' => array(
933
+			'5.4' => false,
934
+			'5.5' => true,
935
+		),
936
+		'intlcal_get_least_maximum' => array(
937
+			'5.4' => false,
938
+			'5.5' => true,
939
+		),
940
+		'intlcal_get_locale' => array(
941
+			'5.4' => false,
942
+			'5.5' => true,
943
+		),
944
+		'intlcal_get_maximum' => array(
945
+			'5.4' => false,
946
+			'5.5' => true,
947
+		),
948
+		'intlcal_get_minimal_days_in_first_week' => array(
949
+			'5.4' => false,
950
+			'5.5' => true,
951
+		),
952
+		'intlcal_get_minimum' => array(
953
+			'5.4' => false,
954
+			'5.5' => true,
955
+		),
956
+		'intlcal_get_time_zone' => array(
957
+			'5.4' => false,
958
+			'5.5' => true,
959
+		),
960
+		'intlcal_get_type' => array(
961
+			'5.4' => false,
962
+			'5.5' => true,
963
+		),
964
+		'intlcal_get_weekend_transition' => array(
965
+			'5.4' => false,
966
+			'5.5' => true,
967
+		),
968
+		'intlcal_in_daylight_time' => array(
969
+			'5.4' => false,
970
+			'5.5' => true,
971
+		),
972
+		'intlcal_is_equivalent_to' => array(
973
+			'5.4' => false,
974
+			'5.5' => true,
975
+		),
976
+		'intlcal_is_lenient' => array(
977
+			'5.4' => false,
978
+			'5.5' => true,
979
+		),
980
+		'intlcal_equals' => array(
981
+			'5.4' => false,
982
+			'5.5' => true,
983
+		),
984
+		'intlcal_get_repeated_wall_time_option' => array(
985
+			'5.4' => false,
986
+			'5.5' => true,
987
+		),
988
+		'intlcal_get_skipped_wall_time_option' => array(
989
+			'5.4' => false,
990
+			'5.5' => true,
991
+		),
992
+		'intlcal_set_repeated_wall_time_option' => array(
993
+			'5.4' => false,
994
+			'5.5' => true,
995
+		),
996
+		'intlcal_set_skipped_wall_time_option' => array(
997
+			'5.4' => false,
998
+			'5.5' => true,
999
+		),
1000
+		'intlcal_from_date_time' => array(
1001
+			'5.4' => false,
1002
+			'5.5' => true,
1003
+		),
1004
+		'intlcal_to_date_time' => array(
1005
+			'5.4' => false,
1006
+			'5.5' => true,
1007
+		),
1008
+		'intlcal_get_error_code' => array(
1009
+			'5.4' => false,
1010
+			'5.5' => true,
1011
+		),
1012
+		'intlcal_get_error_message' => array(
1013
+			'5.4' => false,
1014
+			'5.5' => true,
1015
+		),
1016
+		'intlgregcal_create_instance' => array(
1017
+			'5.4' => false,
1018
+			'5.5' => true,
1019
+		),
1020
+		'intlgregcal_set_gregorian_change' => array(
1021
+			'5.4' => false,
1022
+			'5.5' => true,
1023
+		),
1024
+		'intlgregcal_get_gregorian_change' => array(
1025
+			'5.4' => false,
1026
+			'5.5' => true,
1027
+		),
1028
+		'intlgregcal_is_leap_year' => array(
1029
+			'5.4' => false,
1030
+			'5.5' => true,
1031
+		),
1032
+		'intlz_create_time_zone' => array(
1033
+			'5.4' => false,
1034
+			'5.5' => true,
1035
+		),
1036
+		'intlz_create_default' => array(
1037
+			'5.4' => false,
1038
+			'5.5' => true,
1039
+		),
1040
+		'intlz_get_id' => array(
1041
+			'5.4' => false,
1042
+			'5.5' => true,
1043
+		),
1044
+		'intlz_get_gmt' => array(
1045
+			'5.4' => false,
1046
+			'5.5' => true,
1047
+		),
1048
+		'intlz_get_unknown' => array(
1049
+			'5.4' => false,
1050
+			'5.5' => true,
1051
+		),
1052
+		'intlz_create_enumeration' => array(
1053
+			'5.4' => false,
1054
+			'5.5' => true,
1055
+		),
1056
+		'intlz_count_equivalent_ids' => array(
1057
+			'5.4' => false,
1058
+			'5.5' => true,
1059
+		),
1060
+		'intlz_create_time_zone_id_enumeration' => array(
1061
+			'5.4' => false,
1062
+			'5.5' => true,
1063
+		),
1064
+		'intlz_get_canonical_id' => array(
1065
+			'5.4' => false,
1066
+			'5.5' => true,
1067
+		),
1068
+		'intlz_get_region' => array(
1069
+			'5.4' => false,
1070
+			'5.5' => true,
1071
+		),
1072
+		'intlz_get_tz_data_version' => array(
1073
+			'5.4' => false,
1074
+			'5.5' => true,
1075
+		),
1076
+		'intlz_get_equivalent_id' => array(
1077
+			'5.4' => false,
1078
+			'5.5' => true,
1079
+		),
1080
+		'intlz_use_daylight_time' => array(
1081
+			'5.4' => false,
1082
+			'5.5' => true,
1083
+		),
1084
+		'intlz_get_offset' => array(
1085
+			'5.4' => false,
1086
+			'5.5' => true,
1087
+		),
1088
+		'intlz_get_raw_offset' => array(
1089
+			'5.4' => false,
1090
+			'5.5' => true,
1091
+		),
1092
+		'intlz_has_same_rules' => array(
1093
+			'5.4' => false,
1094
+			'5.5' => true,
1095
+		),
1096
+		'intlz_get_display_name' => array(
1097
+			'5.4' => false,
1098
+			'5.5' => true,
1099
+		),
1100
+		'intlz_get_dst_savings' => array(
1101
+			'5.4' => false,
1102
+			'5.5' => true,
1103
+		),
1104
+		'intlz_from_date_time_zone' => array(
1105
+			'5.4' => false,
1106
+			'5.5' => true,
1107
+		),
1108
+		'intlz_to_date_time_zone' => array(
1109
+			'5.4' => false,
1110
+			'5.5' => true,
1111
+		),
1112
+		'intlz_get_error_code' => array(
1113
+			'5.4' => false,
1114
+			'5.5' => true,
1115
+		),
1116
+		'intlz_get_error_message' => array(
1117
+			'5.4' => false,
1118
+			'5.5' => true,
1119
+		),
1120 1120
 
1121
-        'gmp_root' => array(
1122
-            '5.5' => false,
1123
-            '5.6' => true,
1124
-        ),
1125
-        'gmp_rootrem' => array(
1126
-            '5.5' => false,
1127
-            '5.6' => true,
1128
-        ),
1129
-        'hash_equals' => array(
1130
-            '5.5' => false,
1131
-            '5.6' => true,
1132
-        ),
1133
-        'ldap_escape' => array(
1134
-            '5.5' => false,
1135
-            '5.6' => true,
1136
-        ),
1137
-        'ldap_modify_batch' => array(
1138
-            '5.4.25' => false,
1139
-            '5.5.9'  => false,
1140
-            '5.4.26' => true,
1141
-            '5.5.10' => true,
1142
-            '5.6.0'  => true,
1143
-        ),
1144
-        'mysqli_get_links_stats' => array(
1145
-            '5.5' => false,
1146
-            '5.6' => true,
1147
-        ),
1148
-        'openssl_get_cert_locations' => array(
1149
-            '5.5' => false,
1150
-            '5.6' => true,
1151
-        ),
1152
-        'openssl_x509_fingerprint' => array(
1153
-            '5.5' => false,
1154
-            '5.6' => true,
1155
-        ),
1156
-        'openssl_spki_new' => array(
1157
-            '5.5' => false,
1158
-            '5.6' => true,
1159
-        ),
1160
-        'openssl_spki_verify' => array(
1161
-            '5.5' => false,
1162
-            '5.6' => true,
1163
-        ),
1164
-        'openssl_spki_export_challenge' => array(
1165
-            '5.5' => false,
1166
-            '5.6' => true,
1167
-        ),
1168
-        'openssl_spki_export' => array(
1169
-            '5.5' => false,
1170
-            '5.6' => true,
1171
-        ),
1172
-        'pg_connect_poll' => array(
1173
-            '5.5' => false,
1174
-            '5.6' => true,
1175
-        ),
1176
-        'pg_consume_input' => array(
1177
-            '5.5' => false,
1178
-            '5.6' => true,
1179
-        ),
1180
-        'pg_flush' => array(
1181
-            '5.5' => false,
1182
-            '5.6' => true,
1183
-        ),
1184
-        'pg_lo_truncate' => array(
1185
-            '5.5' => false,
1186
-            '5.6' => true,
1187
-        ),
1188
-        'pg_socket' => array(
1189
-            '5.5' => false,
1190
-            '5.6' => true,
1191
-        ),
1192
-        'session_abort' => array(
1193
-            '5.5' => false,
1194
-            '5.6' => true,
1195
-        ),
1196
-        'session_reset' => array(
1197
-            '5.5' => false,
1198
-            '5.6' => true,
1199
-        ),
1121
+		'gmp_root' => array(
1122
+			'5.5' => false,
1123
+			'5.6' => true,
1124
+		),
1125
+		'gmp_rootrem' => array(
1126
+			'5.5' => false,
1127
+			'5.6' => true,
1128
+		),
1129
+		'hash_equals' => array(
1130
+			'5.5' => false,
1131
+			'5.6' => true,
1132
+		),
1133
+		'ldap_escape' => array(
1134
+			'5.5' => false,
1135
+			'5.6' => true,
1136
+		),
1137
+		'ldap_modify_batch' => array(
1138
+			'5.4.25' => false,
1139
+			'5.5.9'  => false,
1140
+			'5.4.26' => true,
1141
+			'5.5.10' => true,
1142
+			'5.6.0'  => true,
1143
+		),
1144
+		'mysqli_get_links_stats' => array(
1145
+			'5.5' => false,
1146
+			'5.6' => true,
1147
+		),
1148
+		'openssl_get_cert_locations' => array(
1149
+			'5.5' => false,
1150
+			'5.6' => true,
1151
+		),
1152
+		'openssl_x509_fingerprint' => array(
1153
+			'5.5' => false,
1154
+			'5.6' => true,
1155
+		),
1156
+		'openssl_spki_new' => array(
1157
+			'5.5' => false,
1158
+			'5.6' => true,
1159
+		),
1160
+		'openssl_spki_verify' => array(
1161
+			'5.5' => false,
1162
+			'5.6' => true,
1163
+		),
1164
+		'openssl_spki_export_challenge' => array(
1165
+			'5.5' => false,
1166
+			'5.6' => true,
1167
+		),
1168
+		'openssl_spki_export' => array(
1169
+			'5.5' => false,
1170
+			'5.6' => true,
1171
+		),
1172
+		'pg_connect_poll' => array(
1173
+			'5.5' => false,
1174
+			'5.6' => true,
1175
+		),
1176
+		'pg_consume_input' => array(
1177
+			'5.5' => false,
1178
+			'5.6' => true,
1179
+		),
1180
+		'pg_flush' => array(
1181
+			'5.5' => false,
1182
+			'5.6' => true,
1183
+		),
1184
+		'pg_lo_truncate' => array(
1185
+			'5.5' => false,
1186
+			'5.6' => true,
1187
+		),
1188
+		'pg_socket' => array(
1189
+			'5.5' => false,
1190
+			'5.6' => true,
1191
+		),
1192
+		'session_abort' => array(
1193
+			'5.5' => false,
1194
+			'5.6' => true,
1195
+		),
1196
+		'session_reset' => array(
1197
+			'5.5' => false,
1198
+			'5.6' => true,
1199
+		),
1200 1200
 
1201
-        'random_bytes' => array(
1202
-            '5.6' => false,
1203
-            '7.0' => true,
1204
-        ),
1205
-        'random_int' => array(
1206
-            '5.6' => false,
1207
-            '7.0' => true,
1208
-        ),
1209
-        'error_clear_last' => array(
1210
-            '5.6' => false,
1211
-            '7.0' => true,
1212
-        ),
1213
-        'gmp_random_seed' => array(
1214
-            '5.6' => false,
1215
-            '7.0' => true,
1216
-        ),
1217
-        'intdiv' => array(
1218
-            '5.6' => false,
1219
-            '7.0' => true,
1220
-        ),
1221
-        'preg_replace_callback_array' => array(
1222
-            '5.6' => false,
1223
-            '7.0' => true,
1224
-        ),
1225
-        'gc_mem_caches' => array(
1226
-            '5.6' => false,
1227
-            '7.0' => true,
1228
-        ),
1229
-        'get_resources' => array(
1230
-            '5.6' => false,
1231
-            '7.0' => true,
1232
-        ),
1233
-        'posix_setrlimit' => array(
1234
-            '5.6' => false,
1235
-            '7.0' => true,
1236
-        ),
1237
-        'inflate_add' => array(
1238
-            '5.6' => false,
1239
-            '7.0' => true,
1240
-        ),
1241
-        'deflate_add' => array(
1242
-            '5.6' => false,
1243
-            '7.0' => true,
1244
-        ),
1245
-        'inflate_init' => array(
1246
-            '5.6' => false,
1247
-            '7.0' => true,
1248
-        ),
1249
-        'deflate_init' => array(
1250
-            '5.6' => false,
1251
-            '7.0' => true,
1252
-        ),
1201
+		'random_bytes' => array(
1202
+			'5.6' => false,
1203
+			'7.0' => true,
1204
+		),
1205
+		'random_int' => array(
1206
+			'5.6' => false,
1207
+			'7.0' => true,
1208
+		),
1209
+		'error_clear_last' => array(
1210
+			'5.6' => false,
1211
+			'7.0' => true,
1212
+		),
1213
+		'gmp_random_seed' => array(
1214
+			'5.6' => false,
1215
+			'7.0' => true,
1216
+		),
1217
+		'intdiv' => array(
1218
+			'5.6' => false,
1219
+			'7.0' => true,
1220
+		),
1221
+		'preg_replace_callback_array' => array(
1222
+			'5.6' => false,
1223
+			'7.0' => true,
1224
+		),
1225
+		'gc_mem_caches' => array(
1226
+			'5.6' => false,
1227
+			'7.0' => true,
1228
+		),
1229
+		'get_resources' => array(
1230
+			'5.6' => false,
1231
+			'7.0' => true,
1232
+		),
1233
+		'posix_setrlimit' => array(
1234
+			'5.6' => false,
1235
+			'7.0' => true,
1236
+		),
1237
+		'inflate_add' => array(
1238
+			'5.6' => false,
1239
+			'7.0' => true,
1240
+		),
1241
+		'deflate_add' => array(
1242
+			'5.6' => false,
1243
+			'7.0' => true,
1244
+		),
1245
+		'inflate_init' => array(
1246
+			'5.6' => false,
1247
+			'7.0' => true,
1248
+		),
1249
+		'deflate_init' => array(
1250
+			'5.6' => false,
1251
+			'7.0' => true,
1252
+		),
1253 1253
 
1254
-        'socket_export_stream' => array(
1255
-            '7.0.6' => false,
1256
-            '7.0.7' => true,
1257
-        ),
1254
+		'socket_export_stream' => array(
1255
+			'7.0.6' => false,
1256
+			'7.0.7' => true,
1257
+		),
1258 1258
 
1259
-        'curl_multi_errno' => array(
1260
-            '7.0' => false,
1261
-            '7.1' => true,
1262
-        ),
1263
-        'curl_share_errno' => array(
1264
-            '7.0' => false,
1265
-            '7.1' => true,
1266
-        ),
1267
-        'curl_share_strerror' => array(
1268
-            '7.0' => false,
1269
-            '7.1' => true,
1270
-        ),
1271
-        'is_iterable' => array(
1272
-            '7.0' => false,
1273
-            '7.1' => true,
1274
-        ),
1275
-        'pcntl_async_signals' => array(
1276
-            '7.0' => false,
1277
-            '7.1' => true,
1278
-        ),
1279
-        'pcntl_signal_get_handler' => array(
1280
-            '7.0' => false,
1281
-            '7.1' => true,
1282
-        ),
1283
-        'session_create_id' => array(
1284
-            '7.0' => false,
1285
-            '7.1' => true,
1286
-        ),
1287
-        'session_gc' => array(
1288
-            '7.0' => false,
1289
-            '7.1' => true,
1290
-        ),
1291
-        'sapi_windows_cp_set' => array(
1292
-            '7.0' => false,
1293
-            '7.1' => true,
1294
-        ),
1295
-        'sapi_windows_cp_get' => array(
1296
-            '7.0' => false,
1297
-            '7.1' => true,
1298
-        ),
1299
-        'sapi_windows_cp_is_utf8' => array(
1300
-            '7.0' => false,
1301
-            '7.1' => true,
1302
-        ),
1303
-        'sapi_windows_cp_conv' => array(
1304
-            '7.0' => false,
1305
-            '7.1' => true,
1306
-        ),
1259
+		'curl_multi_errno' => array(
1260
+			'7.0' => false,
1261
+			'7.1' => true,
1262
+		),
1263
+		'curl_share_errno' => array(
1264
+			'7.0' => false,
1265
+			'7.1' => true,
1266
+		),
1267
+		'curl_share_strerror' => array(
1268
+			'7.0' => false,
1269
+			'7.1' => true,
1270
+		),
1271
+		'is_iterable' => array(
1272
+			'7.0' => false,
1273
+			'7.1' => true,
1274
+		),
1275
+		'pcntl_async_signals' => array(
1276
+			'7.0' => false,
1277
+			'7.1' => true,
1278
+		),
1279
+		'pcntl_signal_get_handler' => array(
1280
+			'7.0' => false,
1281
+			'7.1' => true,
1282
+		),
1283
+		'session_create_id' => array(
1284
+			'7.0' => false,
1285
+			'7.1' => true,
1286
+		),
1287
+		'session_gc' => array(
1288
+			'7.0' => false,
1289
+			'7.1' => true,
1290
+		),
1291
+		'sapi_windows_cp_set' => array(
1292
+			'7.0' => false,
1293
+			'7.1' => true,
1294
+		),
1295
+		'sapi_windows_cp_get' => array(
1296
+			'7.0' => false,
1297
+			'7.1' => true,
1298
+		),
1299
+		'sapi_windows_cp_is_utf8' => array(
1300
+			'7.0' => false,
1301
+			'7.1' => true,
1302
+		),
1303
+		'sapi_windows_cp_conv' => array(
1304
+			'7.0' => false,
1305
+			'7.1' => true,
1306
+		),
1307 1307
 
1308
-        'hash_hkdf' => array(
1309
-            '7.1.1' => false,
1310
-            '7.1.2' => true,
1311
-        ),
1312
-        'oci_register_taf_callback' => array(
1313
-            '7.1.6' => false,
1314
-            '7.1.7' => true,
1315
-        ),
1316
-        'oci_unregister_taf_callback' => array(
1317
-            '7.1.8' => false,
1318
-            '7.1.9' => true,
1319
-        ),
1308
+		'hash_hkdf' => array(
1309
+			'7.1.1' => false,
1310
+			'7.1.2' => true,
1311
+		),
1312
+		'oci_register_taf_callback' => array(
1313
+			'7.1.6' => false,
1314
+			'7.1.7' => true,
1315
+		),
1316
+		'oci_unregister_taf_callback' => array(
1317
+			'7.1.8' => false,
1318
+			'7.1.9' => true,
1319
+		),
1320 1320
 
1321
-        'stream_isatty' => array(
1322
-            '7.1' => false,
1323
-            '7.2' => true,
1324
-        ),
1325
-        'sapi_windows_vt100_support' => array(
1326
-            '7.1' => false,
1327
-            '7.2' => true,
1328
-        ),
1329
-        'ftp_append' => array(
1330
-            '7.1' => false,
1331
-            '7.2' => true,
1332
-        ),
1333
-        'hash_hmac_algos' => array(
1334
-            '7.1' => false,
1335
-            '7.2' => true,
1336
-        ),
1337
-        'imagebmp' => array(
1338
-            '7.1' => false,
1339
-            '7.2' => true,
1340
-        ),
1341
-        'imagecreatefrombmp' => array(
1342
-            '7.1' => false,
1343
-            '7.2' => true,
1344
-        ),
1345
-        'imagegetclip' => array(
1346
-            '7.1' => false,
1347
-            '7.2' => true,
1348
-        ),
1349
-        'imageopenpolygon' => array(
1350
-            '7.1' => false,
1351
-            '7.2' => true,
1352
-        ),
1353
-        'imageresolution' => array(
1354
-            '7.1' => false,
1355
-            '7.2' => true,
1356
-        ),
1357
-        'imagesetclip' => array(
1358
-            '7.1' => false,
1359
-            '7.2' => true,
1360
-        ),
1361
-        'ldap_exop' => array(
1362
-            '7.1' => false,
1363
-            '7.2' => true,
1364
-        ),
1365
-        'ldap_exop_passwd' => array(
1366
-            '7.1' => false,
1367
-            '7.2' => true,
1368
-        ),
1369
-        'ldap_exop_whoami' => array(
1370
-            '7.1' => false,
1371
-            '7.2' => true,
1372
-        ),
1373
-        'ldap_parse_exop' => array(
1374
-            '7.1' => false,
1375
-            '7.2' => true,
1376
-        ),
1377
-        'mb_chr' => array(
1378
-            '7.1' => false,
1379
-            '7.2' => true,
1380
-        ),
1381
-        'mb_ord' => array(
1382
-            '7.1' => false,
1383
-            '7.2' => true,
1384
-        ),
1385
-        'mb_scrub' => array(
1386
-            '7.1' => false,
1387
-            '7.2' => true,
1388
-        ),
1389
-        'socket_addrinfo_lookup' => array(
1390
-            '7.1' => false,
1391
-            '7.2' => true,
1392
-        ),
1393
-        'socket_addrinfo_connect' => array(
1394
-            '7.1' => false,
1395
-            '7.2' => true,
1396
-        ),
1397
-        'socket_addrinfo_bind' => array(
1398
-            '7.1' => false,
1399
-            '7.2' => true,
1400
-        ),
1401
-        'socket_addrinfo_explain' => array(
1402
-            '7.1' => false,
1403
-            '7.2' => true,
1404
-        ),
1405
-        'spl_object_id' => array(
1406
-            '7.1' => false,
1407
-            '7.2' => true,
1408
-        ),
1409
-        'sodium_add' => array(
1410
-            '7.1' => false,
1411
-            '7.2' => true,
1412
-        ),
1413
-        'sodium_base642bin' => array(
1414
-            '7.1' => false,
1415
-            '7.2' => true,
1416
-        ),
1417
-        'sodium_bin2base64' => array(
1418
-            '7.1' => false,
1419
-            '7.2' => true,
1420
-        ),
1421
-        'sodium_bin2hex' => array(
1422
-            '7.1' => false,
1423
-            '7.2' => true,
1424
-        ),
1425
-        'sodium_compare' => array(
1426
-            '7.1' => false,
1427
-            '7.2' => true,
1428
-        ),
1429
-        'sodium_crypto_aead_aes256gcm_decrypt' => array(
1430
-            '7.1' => false,
1431
-            '7.2' => true,
1432
-        ),
1433
-        'sodium_crypto_aead_aes256gcm_encrypt' => array(
1434
-            '7.1' => false,
1435
-            '7.2' => true,
1436
-        ),
1437
-        'sodium_crypto_aead_aes256gcm_is_available' => array(
1438
-            '7.1' => false,
1439
-            '7.2' => true,
1440
-        ),
1441
-        'sodium_crypto_aead_aes256gcm_keygen' => array(
1442
-            '7.1' => false,
1443
-            '7.2' => true,
1444
-        ),
1445
-        'sodium_crypto_aead_chacha20poly1305_decrypt' => array(
1446
-            '7.1' => false,
1447
-            '7.2' => true,
1448
-        ),
1449
-        'sodium_crypto_aead_chacha20poly1305_encrypt' => array(
1450
-            '7.1' => false,
1451
-            '7.2' => true,
1452
-        ),
1453
-        'sodium_crypto_aead_chacha20poly1305_ietf_decrypt' => array(
1454
-            '7.1' => false,
1455
-            '7.2' => true,
1456
-        ),
1457
-        'sodium_crypto_aead_chacha20poly1305_ietf_encrypt' => array(
1458
-            '7.1' => false,
1459
-            '7.2' => true,
1460
-        ),
1461
-        'sodium_crypto_aead_chacha20poly1305_ietf_keygen' => array(
1462
-            '7.1' => false,
1463
-            '7.2' => true,
1464
-        ),
1465
-        'sodium_crypto_aead_chacha20poly1305_keygen' => array(
1466
-            '7.1' => false,
1467
-            '7.2' => true,
1468
-        ),
1469
-        'sodium_crypto_aead_xchacha20poly1305_ietf_decrypt' => array(
1470
-            '7.1' => false,
1471
-            '7.2' => true,
1472
-        ),
1473
-        'sodium_crypto_aead_xchacha20poly1305_ietf_encrypt' => array(
1474
-            '7.1' => false,
1475
-            '7.2' => true,
1476
-        ),
1477
-        'sodium_crypto_aead_xchacha20poly1305_ietf_keygen' => array(
1478
-            '7.1' => false,
1479
-            '7.2' => true,
1480
-        ),
1481
-        'sodium_crypto_auth_keygen' => array(
1482
-            '7.1' => false,
1483
-            '7.2' => true,
1484
-        ),
1485
-        'sodium_crypto_auth_verify' => array(
1486
-            '7.1' => false,
1487
-            '7.2' => true,
1488
-        ),
1489
-        'sodium_crypto_auth' => array(
1490
-            '7.1' => false,
1491
-            '7.2' => true,
1492
-        ),
1493
-        'sodium_crypto_box_keypair_from_secretkey_and_publickey' => array(
1494
-            '7.1' => false,
1495
-            '7.2' => true,
1496
-        ),
1497
-        'sodium_crypto_box_keypair' => array(
1498
-            '7.1' => false,
1499
-            '7.2' => true,
1500
-        ),
1501
-        'sodium_crypto_box_open' => array(
1502
-            '7.1' => false,
1503
-            '7.2' => true,
1504
-        ),
1505
-        'sodium_crypto_box_publickey_from_secretkey' => array(
1506
-            '7.1' => false,
1507
-            '7.2' => true,
1508
-        ),
1509
-        'sodium_crypto_box_publickey' => array(
1510
-            '7.1' => false,
1511
-            '7.2' => true,
1512
-        ),
1513
-        'sodium_crypto_box_seal_open' => array(
1514
-            '7.1' => false,
1515
-            '7.2' => true,
1516
-        ),
1517
-        'sodium_crypto_box_seal' => array(
1518
-            '7.1' => false,
1519
-            '7.2' => true,
1520
-        ),
1521
-        'sodium_crypto_box_secretkey' => array(
1522
-            '7.1' => false,
1523
-            '7.2' => true,
1524
-        ),
1525
-        'sodium_crypto_box_seed_keypair' => array(
1526
-            '7.1' => false,
1527
-            '7.2' => true,
1528
-        ),
1529
-        'sodium_crypto_box' => array(
1530
-            '7.1' => false,
1531
-            '7.2' => true,
1532
-        ),
1533
-        'sodium_crypto_generichash_final' => array(
1534
-            '7.1' => false,
1535
-            '7.2' => true,
1536
-        ),
1537
-        'sodium_crypto_generichash_init' => array(
1538
-            '7.1' => false,
1539
-            '7.2' => true,
1540
-        ),
1541
-        'sodium_crypto_generichash_keygen' => array(
1542
-            '7.1' => false,
1543
-            '7.2' => true,
1544
-        ),
1545
-        'sodium_crypto_generichash_update' => array(
1546
-            '7.1' => false,
1547
-            '7.2' => true,
1548
-        ),
1549
-        'sodium_crypto_generichash' => array(
1550
-            '7.1' => false,
1551
-            '7.2' => true,
1552
-        ),
1553
-        'sodium_crypto_kdf_derive_from_key' => array(
1554
-            '7.1' => false,
1555
-            '7.2' => true,
1556
-        ),
1557
-        'sodium_crypto_kdf_keygen' => array(
1558
-            '7.1' => false,
1559
-            '7.2' => true,
1560
-        ),
1561
-        'sodium_crypto_kx_client_session_keys' => array(
1562
-            '7.1' => false,
1563
-            '7.2' => true,
1564
-        ),
1565
-        'sodium_crypto_kx_keypair' => array(
1566
-            '7.1' => false,
1567
-            '7.2' => true,
1568
-        ),
1569
-        'sodium_crypto_kx_publickey' => array(
1570
-            '7.1' => false,
1571
-            '7.2' => true,
1572
-        ),
1573
-        'sodium_crypto_kx_secretkey' => array(
1574
-            '7.1' => false,
1575
-            '7.2' => true,
1576
-        ),
1577
-        'sodium_crypto_kx_seed_keypair' => array(
1578
-            '7.1' => false,
1579
-            '7.2' => true,
1580
-        ),
1581
-        'sodium_crypto_kx_server_session_keys' => array(
1582
-            '7.1' => false,
1583
-            '7.2' => true,
1584
-        ),
1585
-        'sodium_crypto_pwhash_scryptsalsa208sha256_str_verify' => array(
1586
-            '7.1' => false,
1587
-            '7.2' => true,
1588
-        ),
1589
-        'sodium_crypto_pwhash_scryptsalsa208sha256_str' => array(
1590
-            '7.1' => false,
1591
-            '7.2' => true,
1592
-        ),
1593
-        'sodium_crypto_pwhash_scryptsalsa208sha256' => array(
1594
-            '7.1' => false,
1595
-            '7.2' => true,
1596
-        ),
1597
-        'sodium_crypto_pwhash_str_needs_rehash' => array(
1598
-            '7.1' => false,
1599
-            '7.2' => true,
1600
-        ),
1601
-        'sodium_crypto_pwhash_str_verify' => array(
1602
-            '7.1' => false,
1603
-            '7.2' => true,
1604
-        ),
1605
-        'sodium_crypto_pwhash_str' => array(
1606
-            '7.1' => false,
1607
-            '7.2' => true,
1608
-        ),
1609
-        'sodium_crypto_pwhash' => array(
1610
-            '7.1' => false,
1611
-            '7.2' => true,
1612
-        ),
1613
-        'sodium_crypto_scalarmult_base' => array(
1614
-            '7.1' => false,
1615
-            '7.2' => true,
1616
-        ),
1617
-        'sodium_crypto_scalarmult' => array(
1618
-            '7.1' => false,
1619
-            '7.2' => true,
1620
-        ),
1621
-        'sodium_crypto_secretbox_keygen' => array(
1622
-            '7.1' => false,
1623
-            '7.2' => true,
1624
-        ),
1625
-        'sodium_crypto_secretbox_open' => array(
1626
-            '7.1' => false,
1627
-            '7.2' => true,
1628
-        ),
1629
-        'sodium_crypto_secretbox' => array(
1630
-            '7.1' => false,
1631
-            '7.2' => true,
1632
-        ),
1633
-        'sodium_crypto_secretstream_xchacha20poly1305_init_pull' => array(
1634
-            '7.1' => false,
1635
-            '7.2' => true,
1636
-        ),
1637
-        'sodium_crypto_secretstream_xchacha20poly1305_init_push' => array(
1638
-            '7.1' => false,
1639
-            '7.2' => true,
1640
-        ),
1641
-        'sodium_crypto_secretstream_xchacha20poly1305_keygen' => array(
1642
-            '7.1' => false,
1643
-            '7.2' => true,
1644
-        ),
1645
-        'sodium_crypto_secretstream_xchacha20poly1305_pull' => array(
1646
-            '7.1' => false,
1647
-            '7.2' => true,
1648
-        ),
1649
-        'sodium_crypto_secretstream_xchacha20poly1305_push' => array(
1650
-            '7.1' => false,
1651
-            '7.2' => true,
1652
-        ),
1653
-        'sodium_crypto_secretstream_xchacha20poly1305_rekey' => array(
1654
-            '7.1' => false,
1655
-            '7.2' => true,
1656
-        ),
1657
-        'sodium_crypto_shorthash_keygen' => array(
1658
-            '7.1' => false,
1659
-            '7.2' => true,
1660
-        ),
1661
-        'sodium_crypto_shorthash' => array(
1662
-            '7.1' => false,
1663
-            '7.2' => true,
1664
-        ),
1665
-        'sodium_crypto_sign_detached' => array(
1666
-            '7.1' => false,
1667
-            '7.2' => true,
1668
-        ),
1669
-        'sodium_crypto_sign_ed25519_pk_to_curve25519' => array(
1670
-            '7.1' => false,
1671
-            '7.2' => true,
1672
-        ),
1673
-        'sodium_crypto_sign_ed25519_sk_to_curve25519' => array(
1674
-            '7.1' => false,
1675
-            '7.2' => true,
1676
-        ),
1677
-        'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => array(
1678
-            '7.1' => false,
1679
-            '7.2' => true,
1680
-        ),
1681
-        'sodium_crypto_sign_keypair' => array(
1682
-            '7.1' => false,
1683
-            '7.2' => true,
1684
-        ),
1685
-        'sodium_crypto_sign_open' => array(
1686
-            '7.1' => false,
1687
-            '7.2' => true,
1688
-        ),
1689
-        'sodium_crypto_sign_publickey_from_secretkey' => array(
1690
-            '7.1' => false,
1691
-            '7.2' => true,
1692
-        ),
1693
-        'sodium_crypto_sign_publickey' => array(
1694
-            '7.1' => false,
1695
-            '7.2' => true,
1696
-        ),
1697
-        'sodium_crypto_sign_secretkey' => array(
1698
-            '7.1' => false,
1699
-            '7.2' => true,
1700
-        ),
1701
-        'sodium_crypto_sign_seed_keypair' => array(
1702
-            '7.1' => false,
1703
-            '7.2' => true,
1704
-        ),
1705
-        'sodium_crypto_sign_verify_detached' => array(
1706
-            '7.1' => false,
1707
-            '7.2' => true,
1708
-        ),
1709
-        'sodium_crypto_sign' => array(
1710
-            '7.1' => false,
1711
-            '7.2' => true,
1712
-        ),
1713
-        'sodium_crypto_stream_keygen' => array(
1714
-            '7.1' => false,
1715
-            '7.2' => true,
1716
-        ),
1717
-        'sodium_crypto_stream_xor' => array(
1718
-            '7.1' => false,
1719
-            '7.2' => true,
1720
-        ),
1721
-        'sodium_crypto_stream' => array(
1722
-            '7.1' => false,
1723
-            '7.2' => true,
1724
-        ),
1725
-        'sodium_hex2bin' => array(
1726
-            '7.1' => false,
1727
-            '7.2' => true,
1728
-        ),
1729
-        'sodium_increment' => array(
1730
-            '7.1' => false,
1731
-            '7.2' => true,
1732
-        ),
1733
-        'sodium_memcmp' => array(
1734
-            '7.1' => false,
1735
-            '7.2' => true,
1736
-        ),
1737
-        'sodium_memzero' => array(
1738
-            '7.1' => false,
1739
-            '7.2' => true,
1740
-        ),
1741
-        'sodium_pad' => array(
1742
-            '7.1' => false,
1743
-            '7.2' => true,
1744
-        ),
1745
-        'sodium_unpad' => array(
1746
-            '7.1' => false,
1747
-            '7.2' => true,
1748
-        ),
1749
-        // Introduced in 7.2.14 and 7.3.1 similtanously.
1750
-        'oci_set_call_timeout' => array(
1751
-            '7.2.13' => false,
1752
-            '7.2.14' => true,
1753
-        ),
1754
-        // Introduced in 7.2.14 and 7.3.1 similtanously.
1755
-        'oci_set_db_operation' => array(
1756
-            '7.2.13' => false,
1757
-            '7.2.14' => true,
1758
-        ),
1321
+		'stream_isatty' => array(
1322
+			'7.1' => false,
1323
+			'7.2' => true,
1324
+		),
1325
+		'sapi_windows_vt100_support' => array(
1326
+			'7.1' => false,
1327
+			'7.2' => true,
1328
+		),
1329
+		'ftp_append' => array(
1330
+			'7.1' => false,
1331
+			'7.2' => true,
1332
+		),
1333
+		'hash_hmac_algos' => array(
1334
+			'7.1' => false,
1335
+			'7.2' => true,
1336
+		),
1337
+		'imagebmp' => array(
1338
+			'7.1' => false,
1339
+			'7.2' => true,
1340
+		),
1341
+		'imagecreatefrombmp' => array(
1342
+			'7.1' => false,
1343
+			'7.2' => true,
1344
+		),
1345
+		'imagegetclip' => array(
1346
+			'7.1' => false,
1347
+			'7.2' => true,
1348
+		),
1349
+		'imageopenpolygon' => array(
1350
+			'7.1' => false,
1351
+			'7.2' => true,
1352
+		),
1353
+		'imageresolution' => array(
1354
+			'7.1' => false,
1355
+			'7.2' => true,
1356
+		),
1357
+		'imagesetclip' => array(
1358
+			'7.1' => false,
1359
+			'7.2' => true,
1360
+		),
1361
+		'ldap_exop' => array(
1362
+			'7.1' => false,
1363
+			'7.2' => true,
1364
+		),
1365
+		'ldap_exop_passwd' => array(
1366
+			'7.1' => false,
1367
+			'7.2' => true,
1368
+		),
1369
+		'ldap_exop_whoami' => array(
1370
+			'7.1' => false,
1371
+			'7.2' => true,
1372
+		),
1373
+		'ldap_parse_exop' => array(
1374
+			'7.1' => false,
1375
+			'7.2' => true,
1376
+		),
1377
+		'mb_chr' => array(
1378
+			'7.1' => false,
1379
+			'7.2' => true,
1380
+		),
1381
+		'mb_ord' => array(
1382
+			'7.1' => false,
1383
+			'7.2' => true,
1384
+		),
1385
+		'mb_scrub' => array(
1386
+			'7.1' => false,
1387
+			'7.2' => true,
1388
+		),
1389
+		'socket_addrinfo_lookup' => array(
1390
+			'7.1' => false,
1391
+			'7.2' => true,
1392
+		),
1393
+		'socket_addrinfo_connect' => array(
1394
+			'7.1' => false,
1395
+			'7.2' => true,
1396
+		),
1397
+		'socket_addrinfo_bind' => array(
1398
+			'7.1' => false,
1399
+			'7.2' => true,
1400
+		),
1401
+		'socket_addrinfo_explain' => array(
1402
+			'7.1' => false,
1403
+			'7.2' => true,
1404
+		),
1405
+		'spl_object_id' => array(
1406
+			'7.1' => false,
1407
+			'7.2' => true,
1408
+		),
1409
+		'sodium_add' => array(
1410
+			'7.1' => false,
1411
+			'7.2' => true,
1412
+		),
1413
+		'sodium_base642bin' => array(
1414
+			'7.1' => false,
1415
+			'7.2' => true,
1416
+		),
1417
+		'sodium_bin2base64' => array(
1418
+			'7.1' => false,
1419
+			'7.2' => true,
1420
+		),
1421
+		'sodium_bin2hex' => array(
1422
+			'7.1' => false,
1423
+			'7.2' => true,
1424
+		),
1425
+		'sodium_compare' => array(
1426
+			'7.1' => false,
1427
+			'7.2' => true,
1428
+		),
1429
+		'sodium_crypto_aead_aes256gcm_decrypt' => array(
1430
+			'7.1' => false,
1431
+			'7.2' => true,
1432
+		),
1433
+		'sodium_crypto_aead_aes256gcm_encrypt' => array(
1434
+			'7.1' => false,
1435
+			'7.2' => true,
1436
+		),
1437
+		'sodium_crypto_aead_aes256gcm_is_available' => array(
1438
+			'7.1' => false,
1439
+			'7.2' => true,
1440
+		),
1441
+		'sodium_crypto_aead_aes256gcm_keygen' => array(
1442
+			'7.1' => false,
1443
+			'7.2' => true,
1444
+		),
1445
+		'sodium_crypto_aead_chacha20poly1305_decrypt' => array(
1446
+			'7.1' => false,
1447
+			'7.2' => true,
1448
+		),
1449
+		'sodium_crypto_aead_chacha20poly1305_encrypt' => array(
1450
+			'7.1' => false,
1451
+			'7.2' => true,
1452
+		),
1453
+		'sodium_crypto_aead_chacha20poly1305_ietf_decrypt' => array(
1454
+			'7.1' => false,
1455
+			'7.2' => true,
1456
+		),
1457
+		'sodium_crypto_aead_chacha20poly1305_ietf_encrypt' => array(
1458
+			'7.1' => false,
1459
+			'7.2' => true,
1460
+		),
1461
+		'sodium_crypto_aead_chacha20poly1305_ietf_keygen' => array(
1462
+			'7.1' => false,
1463
+			'7.2' => true,
1464
+		),
1465
+		'sodium_crypto_aead_chacha20poly1305_keygen' => array(
1466
+			'7.1' => false,
1467
+			'7.2' => true,
1468
+		),
1469
+		'sodium_crypto_aead_xchacha20poly1305_ietf_decrypt' => array(
1470
+			'7.1' => false,
1471
+			'7.2' => true,
1472
+		),
1473
+		'sodium_crypto_aead_xchacha20poly1305_ietf_encrypt' => array(
1474
+			'7.1' => false,
1475
+			'7.2' => true,
1476
+		),
1477
+		'sodium_crypto_aead_xchacha20poly1305_ietf_keygen' => array(
1478
+			'7.1' => false,
1479
+			'7.2' => true,
1480
+		),
1481
+		'sodium_crypto_auth_keygen' => array(
1482
+			'7.1' => false,
1483
+			'7.2' => true,
1484
+		),
1485
+		'sodium_crypto_auth_verify' => array(
1486
+			'7.1' => false,
1487
+			'7.2' => true,
1488
+		),
1489
+		'sodium_crypto_auth' => array(
1490
+			'7.1' => false,
1491
+			'7.2' => true,
1492
+		),
1493
+		'sodium_crypto_box_keypair_from_secretkey_and_publickey' => array(
1494
+			'7.1' => false,
1495
+			'7.2' => true,
1496
+		),
1497
+		'sodium_crypto_box_keypair' => array(
1498
+			'7.1' => false,
1499
+			'7.2' => true,
1500
+		),
1501
+		'sodium_crypto_box_open' => array(
1502
+			'7.1' => false,
1503
+			'7.2' => true,
1504
+		),
1505
+		'sodium_crypto_box_publickey_from_secretkey' => array(
1506
+			'7.1' => false,
1507
+			'7.2' => true,
1508
+		),
1509
+		'sodium_crypto_box_publickey' => array(
1510
+			'7.1' => false,
1511
+			'7.2' => true,
1512
+		),
1513
+		'sodium_crypto_box_seal_open' => array(
1514
+			'7.1' => false,
1515
+			'7.2' => true,
1516
+		),
1517
+		'sodium_crypto_box_seal' => array(
1518
+			'7.1' => false,
1519
+			'7.2' => true,
1520
+		),
1521
+		'sodium_crypto_box_secretkey' => array(
1522
+			'7.1' => false,
1523
+			'7.2' => true,
1524
+		),
1525
+		'sodium_crypto_box_seed_keypair' => array(
1526
+			'7.1' => false,
1527
+			'7.2' => true,
1528
+		),
1529
+		'sodium_crypto_box' => array(
1530
+			'7.1' => false,
1531
+			'7.2' => true,
1532
+		),
1533
+		'sodium_crypto_generichash_final' => array(
1534
+			'7.1' => false,
1535
+			'7.2' => true,
1536
+		),
1537
+		'sodium_crypto_generichash_init' => array(
1538
+			'7.1' => false,
1539
+			'7.2' => true,
1540
+		),
1541
+		'sodium_crypto_generichash_keygen' => array(
1542
+			'7.1' => false,
1543
+			'7.2' => true,
1544
+		),
1545
+		'sodium_crypto_generichash_update' => array(
1546
+			'7.1' => false,
1547
+			'7.2' => true,
1548
+		),
1549
+		'sodium_crypto_generichash' => array(
1550
+			'7.1' => false,
1551
+			'7.2' => true,
1552
+		),
1553
+		'sodium_crypto_kdf_derive_from_key' => array(
1554
+			'7.1' => false,
1555
+			'7.2' => true,
1556
+		),
1557
+		'sodium_crypto_kdf_keygen' => array(
1558
+			'7.1' => false,
1559
+			'7.2' => true,
1560
+		),
1561
+		'sodium_crypto_kx_client_session_keys' => array(
1562
+			'7.1' => false,
1563
+			'7.2' => true,
1564
+		),
1565
+		'sodium_crypto_kx_keypair' => array(
1566
+			'7.1' => false,
1567
+			'7.2' => true,
1568
+		),
1569
+		'sodium_crypto_kx_publickey' => array(
1570
+			'7.1' => false,
1571
+			'7.2' => true,
1572
+		),
1573
+		'sodium_crypto_kx_secretkey' => array(
1574
+			'7.1' => false,
1575
+			'7.2' => true,
1576
+		),
1577
+		'sodium_crypto_kx_seed_keypair' => array(
1578
+			'7.1' => false,
1579
+			'7.2' => true,
1580
+		),
1581
+		'sodium_crypto_kx_server_session_keys' => array(
1582
+			'7.1' => false,
1583
+			'7.2' => true,
1584
+		),
1585
+		'sodium_crypto_pwhash_scryptsalsa208sha256_str_verify' => array(
1586
+			'7.1' => false,
1587
+			'7.2' => true,
1588
+		),
1589
+		'sodium_crypto_pwhash_scryptsalsa208sha256_str' => array(
1590
+			'7.1' => false,
1591
+			'7.2' => true,
1592
+		),
1593
+		'sodium_crypto_pwhash_scryptsalsa208sha256' => array(
1594
+			'7.1' => false,
1595
+			'7.2' => true,
1596
+		),
1597
+		'sodium_crypto_pwhash_str_needs_rehash' => array(
1598
+			'7.1' => false,
1599
+			'7.2' => true,
1600
+		),
1601
+		'sodium_crypto_pwhash_str_verify' => array(
1602
+			'7.1' => false,
1603
+			'7.2' => true,
1604
+		),
1605
+		'sodium_crypto_pwhash_str' => array(
1606
+			'7.1' => false,
1607
+			'7.2' => true,
1608
+		),
1609
+		'sodium_crypto_pwhash' => array(
1610
+			'7.1' => false,
1611
+			'7.2' => true,
1612
+		),
1613
+		'sodium_crypto_scalarmult_base' => array(
1614
+			'7.1' => false,
1615
+			'7.2' => true,
1616
+		),
1617
+		'sodium_crypto_scalarmult' => array(
1618
+			'7.1' => false,
1619
+			'7.2' => true,
1620
+		),
1621
+		'sodium_crypto_secretbox_keygen' => array(
1622
+			'7.1' => false,
1623
+			'7.2' => true,
1624
+		),
1625
+		'sodium_crypto_secretbox_open' => array(
1626
+			'7.1' => false,
1627
+			'7.2' => true,
1628
+		),
1629
+		'sodium_crypto_secretbox' => array(
1630
+			'7.1' => false,
1631
+			'7.2' => true,
1632
+		),
1633
+		'sodium_crypto_secretstream_xchacha20poly1305_init_pull' => array(
1634
+			'7.1' => false,
1635
+			'7.2' => true,
1636
+		),
1637
+		'sodium_crypto_secretstream_xchacha20poly1305_init_push' => array(
1638
+			'7.1' => false,
1639
+			'7.2' => true,
1640
+		),
1641
+		'sodium_crypto_secretstream_xchacha20poly1305_keygen' => array(
1642
+			'7.1' => false,
1643
+			'7.2' => true,
1644
+		),
1645
+		'sodium_crypto_secretstream_xchacha20poly1305_pull' => array(
1646
+			'7.1' => false,
1647
+			'7.2' => true,
1648
+		),
1649
+		'sodium_crypto_secretstream_xchacha20poly1305_push' => array(
1650
+			'7.1' => false,
1651
+			'7.2' => true,
1652
+		),
1653
+		'sodium_crypto_secretstream_xchacha20poly1305_rekey' => array(
1654
+			'7.1' => false,
1655
+			'7.2' => true,
1656
+		),
1657
+		'sodium_crypto_shorthash_keygen' => array(
1658
+			'7.1' => false,
1659
+			'7.2' => true,
1660
+		),
1661
+		'sodium_crypto_shorthash' => array(
1662
+			'7.1' => false,
1663
+			'7.2' => true,
1664
+		),
1665
+		'sodium_crypto_sign_detached' => array(
1666
+			'7.1' => false,
1667
+			'7.2' => true,
1668
+		),
1669
+		'sodium_crypto_sign_ed25519_pk_to_curve25519' => array(
1670
+			'7.1' => false,
1671
+			'7.2' => true,
1672
+		),
1673
+		'sodium_crypto_sign_ed25519_sk_to_curve25519' => array(
1674
+			'7.1' => false,
1675
+			'7.2' => true,
1676
+		),
1677
+		'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => array(
1678
+			'7.1' => false,
1679
+			'7.2' => true,
1680
+		),
1681
+		'sodium_crypto_sign_keypair' => array(
1682
+			'7.1' => false,
1683
+			'7.2' => true,
1684
+		),
1685
+		'sodium_crypto_sign_open' => array(
1686
+			'7.1' => false,
1687
+			'7.2' => true,
1688
+		),
1689
+		'sodium_crypto_sign_publickey_from_secretkey' => array(
1690
+			'7.1' => false,
1691
+			'7.2' => true,
1692
+		),
1693
+		'sodium_crypto_sign_publickey' => array(
1694
+			'7.1' => false,
1695
+			'7.2' => true,
1696
+		),
1697
+		'sodium_crypto_sign_secretkey' => array(
1698
+			'7.1' => false,
1699
+			'7.2' => true,
1700
+		),
1701
+		'sodium_crypto_sign_seed_keypair' => array(
1702
+			'7.1' => false,
1703
+			'7.2' => true,
1704
+		),
1705
+		'sodium_crypto_sign_verify_detached' => array(
1706
+			'7.1' => false,
1707
+			'7.2' => true,
1708
+		),
1709
+		'sodium_crypto_sign' => array(
1710
+			'7.1' => false,
1711
+			'7.2' => true,
1712
+		),
1713
+		'sodium_crypto_stream_keygen' => array(
1714
+			'7.1' => false,
1715
+			'7.2' => true,
1716
+		),
1717
+		'sodium_crypto_stream_xor' => array(
1718
+			'7.1' => false,
1719
+			'7.2' => true,
1720
+		),
1721
+		'sodium_crypto_stream' => array(
1722
+			'7.1' => false,
1723
+			'7.2' => true,
1724
+		),
1725
+		'sodium_hex2bin' => array(
1726
+			'7.1' => false,
1727
+			'7.2' => true,
1728
+		),
1729
+		'sodium_increment' => array(
1730
+			'7.1' => false,
1731
+			'7.2' => true,
1732
+		),
1733
+		'sodium_memcmp' => array(
1734
+			'7.1' => false,
1735
+			'7.2' => true,
1736
+		),
1737
+		'sodium_memzero' => array(
1738
+			'7.1' => false,
1739
+			'7.2' => true,
1740
+		),
1741
+		'sodium_pad' => array(
1742
+			'7.1' => false,
1743
+			'7.2' => true,
1744
+		),
1745
+		'sodium_unpad' => array(
1746
+			'7.1' => false,
1747
+			'7.2' => true,
1748
+		),
1749
+		// Introduced in 7.2.14 and 7.3.1 similtanously.
1750
+		'oci_set_call_timeout' => array(
1751
+			'7.2.13' => false,
1752
+			'7.2.14' => true,
1753
+		),
1754
+		// Introduced in 7.2.14 and 7.3.1 similtanously.
1755
+		'oci_set_db_operation' => array(
1756
+			'7.2.13' => false,
1757
+			'7.2.14' => true,
1758
+		),
1759 1759
 
1760
-        'hrtime' => array(
1761
-            '7.2' => false,
1762
-            '7.3' => true,
1763
-        ),
1764
-        'is_countable' => array(
1765
-            '7.2' => false,
1766
-            '7.3' => true,
1767
-        ),
1768
-        'array_key_first' => array(
1769
-            '7.2' => false,
1770
-            '7.3' => true,
1771
-        ),
1772
-        'array_key_last' => array(
1773
-            '7.2' => false,
1774
-            '7.3' => true,
1775
-        ),
1776
-        'fpm_get_status' => array(
1777
-            '7.2' => false,
1778
-            '7.3' => true,
1779
-        ),
1780
-        'net_get_interfaces' => array(
1781
-            '7.2' => false,
1782
-            '7.3' => true,
1783
-        ),
1784
-        'gmp_binomial' => array(
1785
-            '7.2' => false,
1786
-            '7.3' => true,
1787
-        ),
1788
-        'gmp_lcm' => array(
1789
-            '7.2' => false,
1790
-            '7.3' => true,
1791
-        ),
1792
-        'gmp_perfect_power' => array(
1793
-            '7.2' => false,
1794
-            '7.3' => true,
1795
-        ),
1796
-        'gmp_kronecker' => array(
1797
-            '7.2' => false,
1798
-            '7.3' => true,
1799
-        ),
1800
-        'ldap_add_ext' => array(
1801
-            '7.2' => false,
1802
-            '7.3' => true,
1803
-        ),
1804
-        'ldap_bind_ext' => array(
1805
-            '7.2' => false,
1806
-            '7.3' => true,
1807
-        ),
1808
-        'ldap_delete_ext' => array(
1809
-            '7.2' => false,
1810
-            '7.3' => true,
1811
-        ),
1812
-        'ldap_exop_refresh' => array(
1813
-            '7.2' => false,
1814
-            '7.3' => true,
1815
-        ),
1816
-        'ldap_mod_add_ext' => array(
1817
-            '7.2' => false,
1818
-            '7.3' => true,
1819
-        ),
1820
-        'ldap_mod_replace_ext' => array(
1821
-            '7.2' => false,
1822
-            '7.3' => true,
1823
-        ),
1824
-        'ldap_mod_del_ext' => array(
1825
-            '7.2' => false,
1826
-            '7.3' => true,
1827
-        ),
1828
-        'ldap_rename_ext' => array(
1829
-            '7.2' => false,
1830
-            '7.3' => true,
1831
-        ),
1832
-        'normalizer_get_raw_decomposition' => array(
1833
-            '7.2' => false,
1834
-            '7.3' => true,
1835
-        ),
1836
-        'openssl_pkey_derive' => array(
1837
-            '7.2' => false,
1838
-            '7.3' => true,
1839
-        ),
1840
-        'socket_wsaprotocol_info_export' => array(
1841
-            '7.2' => false,
1842
-            '7.3' => true,
1843
-        ),
1844
-        'socket_wsaprotocol_info_import' => array(
1845
-            '7.2' => false,
1846
-            '7.3' => true,
1847
-        ),
1848
-        'socket_wsaprotocol_info_release' => array(
1849
-            '7.2' => false,
1850
-            '7.3' => true,
1851
-        ),
1760
+		'hrtime' => array(
1761
+			'7.2' => false,
1762
+			'7.3' => true,
1763
+		),
1764
+		'is_countable' => array(
1765
+			'7.2' => false,
1766
+			'7.3' => true,
1767
+		),
1768
+		'array_key_first' => array(
1769
+			'7.2' => false,
1770
+			'7.3' => true,
1771
+		),
1772
+		'array_key_last' => array(
1773
+			'7.2' => false,
1774
+			'7.3' => true,
1775
+		),
1776
+		'fpm_get_status' => array(
1777
+			'7.2' => false,
1778
+			'7.3' => true,
1779
+		),
1780
+		'net_get_interfaces' => array(
1781
+			'7.2' => false,
1782
+			'7.3' => true,
1783
+		),
1784
+		'gmp_binomial' => array(
1785
+			'7.2' => false,
1786
+			'7.3' => true,
1787
+		),
1788
+		'gmp_lcm' => array(
1789
+			'7.2' => false,
1790
+			'7.3' => true,
1791
+		),
1792
+		'gmp_perfect_power' => array(
1793
+			'7.2' => false,
1794
+			'7.3' => true,
1795
+		),
1796
+		'gmp_kronecker' => array(
1797
+			'7.2' => false,
1798
+			'7.3' => true,
1799
+		),
1800
+		'ldap_add_ext' => array(
1801
+			'7.2' => false,
1802
+			'7.3' => true,
1803
+		),
1804
+		'ldap_bind_ext' => array(
1805
+			'7.2' => false,
1806
+			'7.3' => true,
1807
+		),
1808
+		'ldap_delete_ext' => array(
1809
+			'7.2' => false,
1810
+			'7.3' => true,
1811
+		),
1812
+		'ldap_exop_refresh' => array(
1813
+			'7.2' => false,
1814
+			'7.3' => true,
1815
+		),
1816
+		'ldap_mod_add_ext' => array(
1817
+			'7.2' => false,
1818
+			'7.3' => true,
1819
+		),
1820
+		'ldap_mod_replace_ext' => array(
1821
+			'7.2' => false,
1822
+			'7.3' => true,
1823
+		),
1824
+		'ldap_mod_del_ext' => array(
1825
+			'7.2' => false,
1826
+			'7.3' => true,
1827
+		),
1828
+		'ldap_rename_ext' => array(
1829
+			'7.2' => false,
1830
+			'7.3' => true,
1831
+		),
1832
+		'normalizer_get_raw_decomposition' => array(
1833
+			'7.2' => false,
1834
+			'7.3' => true,
1835
+		),
1836
+		'openssl_pkey_derive' => array(
1837
+			'7.2' => false,
1838
+			'7.3' => true,
1839
+		),
1840
+		'socket_wsaprotocol_info_export' => array(
1841
+			'7.2' => false,
1842
+			'7.3' => true,
1843
+		),
1844
+		'socket_wsaprotocol_info_import' => array(
1845
+			'7.2' => false,
1846
+			'7.3' => true,
1847
+		),
1848
+		'socket_wsaprotocol_info_release' => array(
1849
+			'7.2' => false,
1850
+			'7.3' => true,
1851
+		),
1852 1852
 
1853
-        'get_mangled_object_vars' => array(
1854
-            '7.3' => false,
1855
-            '7.4' => true,
1856
-        ),
1857
-        'mb_str_split' => array(
1858
-            '7.3' => false,
1859
-            '7.4' => true,
1860
-        ),
1861
-        'openssl_x509_verify' => array(
1862
-            '7.3' => false,
1863
-            '7.4' => true,
1864
-        ),
1865
-        'password_algos' => array(
1866
-            '7.3' => false,
1867
-            '7.4' => true,
1868
-        ),
1869
-        'pcntl_unshare' => array(
1870
-            '7.3' => false,
1871
-            '7.4' => true,
1872
-        ),
1873
-        'sapi_windows_set_ctrl_handler' => array(
1874
-            '7.3' => false,
1875
-            '7.4' => true,
1876
-        ),
1877
-        'sapi_windows_generate_ctrl_event' => array(
1878
-            '7.3' => false,
1879
-            '7.4' => true,
1880
-        ),
1881
-    );
1853
+		'get_mangled_object_vars' => array(
1854
+			'7.3' => false,
1855
+			'7.4' => true,
1856
+		),
1857
+		'mb_str_split' => array(
1858
+			'7.3' => false,
1859
+			'7.4' => true,
1860
+		),
1861
+		'openssl_x509_verify' => array(
1862
+			'7.3' => false,
1863
+			'7.4' => true,
1864
+		),
1865
+		'password_algos' => array(
1866
+			'7.3' => false,
1867
+			'7.4' => true,
1868
+		),
1869
+		'pcntl_unshare' => array(
1870
+			'7.3' => false,
1871
+			'7.4' => true,
1872
+		),
1873
+		'sapi_windows_set_ctrl_handler' => array(
1874
+			'7.3' => false,
1875
+			'7.4' => true,
1876
+		),
1877
+		'sapi_windows_generate_ctrl_event' => array(
1878
+			'7.3' => false,
1879
+			'7.4' => true,
1880
+		),
1881
+	);
1882 1882
 
1883 1883
 
1884
-    /**
1885
-     * Returns an array of tokens this test wants to listen for.
1886
-     *
1887
-     * @return array
1888
-     */
1889
-    public function register()
1890
-    {
1891
-        // Handle case-insensitivity of function names.
1892
-        $this->newFunctions = $this->arrayKeysToLowercase($this->newFunctions);
1884
+	/**
1885
+	 * Returns an array of tokens this test wants to listen for.
1886
+	 *
1887
+	 * @return array
1888
+	 */
1889
+	public function register()
1890
+	{
1891
+		// Handle case-insensitivity of function names.
1892
+		$this->newFunctions = $this->arrayKeysToLowercase($this->newFunctions);
1893 1893
 
1894
-        return array(\T_STRING);
1895
-    }
1894
+		return array(\T_STRING);
1895
+	}
1896 1896
 
1897
-    /**
1898
-     * Processes this test, when one of its tokens is encountered.
1899
-     *
1900
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
1901
-     * @param int                   $stackPtr  The position of the current token in
1902
-     *                                         the stack passed in $tokens.
1903
-     *
1904
-     * @return void
1905
-     */
1906
-    public function process(File $phpcsFile, $stackPtr)
1907
-    {
1908
-        $tokens = $phpcsFile->getTokens();
1897
+	/**
1898
+	 * Processes this test, when one of its tokens is encountered.
1899
+	 *
1900
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
1901
+	 * @param int                   $stackPtr  The position of the current token in
1902
+	 *                                         the stack passed in $tokens.
1903
+	 *
1904
+	 * @return void
1905
+	 */
1906
+	public function process(File $phpcsFile, $stackPtr)
1907
+	{
1908
+		$tokens = $phpcsFile->getTokens();
1909 1909
 
1910
-        $ignore = array(
1911
-            \T_DOUBLE_COLON    => true,
1912
-            \T_OBJECT_OPERATOR => true,
1913
-            \T_FUNCTION        => true,
1914
-            \T_CONST           => true,
1915
-        );
1910
+		$ignore = array(
1911
+			\T_DOUBLE_COLON    => true,
1912
+			\T_OBJECT_OPERATOR => true,
1913
+			\T_FUNCTION        => true,
1914
+			\T_CONST           => true,
1915
+		);
1916 1916
 
1917
-        $prevToken = $phpcsFile->findPrevious(\T_WHITESPACE, ($stackPtr - 1), null, true);
1918
-        if (isset($ignore[$tokens[$prevToken]['code']]) === true) {
1919
-            // Not a call to a PHP function.
1920
-            return;
1917
+		$prevToken = $phpcsFile->findPrevious(\T_WHITESPACE, ($stackPtr - 1), null, true);
1918
+		if (isset($ignore[$tokens[$prevToken]['code']]) === true) {
1919
+			// Not a call to a PHP function.
1920
+			return;
1921 1921
 
1922
-        } elseif ($tokens[$prevToken]['code'] === \T_NS_SEPARATOR && $tokens[$prevToken - 1]['code'] === \T_STRING) {
1923
-            // Namespaced function.
1924
-            return;
1925
-        }
1922
+		} elseif ($tokens[$prevToken]['code'] === \T_NS_SEPARATOR && $tokens[$prevToken - 1]['code'] === \T_STRING) {
1923
+			// Namespaced function.
1924
+			return;
1925
+		}
1926 1926
 
1927
-        $function   = $tokens[$stackPtr]['content'];
1928
-        $functionLc = strtolower($function);
1927
+		$function   = $tokens[$stackPtr]['content'];
1928
+		$functionLc = strtolower($function);
1929 1929
 
1930
-        if (isset($this->newFunctions[$functionLc]) === false) {
1931
-            return;
1932
-        }
1930
+		if (isset($this->newFunctions[$functionLc]) === false) {
1931
+			return;
1932
+		}
1933 1933
 
1934
-        $itemInfo = array(
1935
-            'name'   => $function,
1936
-            'nameLc' => $functionLc,
1937
-        );
1938
-        $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
1939
-    }
1934
+		$itemInfo = array(
1935
+			'name'   => $function,
1936
+			'nameLc' => $functionLc,
1937
+		);
1938
+		$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
1939
+	}
1940 1940
 
1941 1941
 
1942
-    /**
1943
-     * Get the relevant sub-array for a specific item from a multi-dimensional array.
1944
-     *
1945
-     * @param array $itemInfo Base information about the item.
1946
-     *
1947
-     * @return array Version and other information about the item.
1948
-     */
1949
-    public function getItemArray(array $itemInfo)
1950
-    {
1951
-        return $this->newFunctions[$itemInfo['nameLc']];
1952
-    }
1942
+	/**
1943
+	 * Get the relevant sub-array for a specific item from a multi-dimensional array.
1944
+	 *
1945
+	 * @param array $itemInfo Base information about the item.
1946
+	 *
1947
+	 * @return array Version and other information about the item.
1948
+	 */
1949
+	public function getItemArray(array $itemInfo)
1950
+	{
1951
+		return $this->newFunctions[$itemInfo['nameLc']];
1952
+	}
1953 1953
 
1954 1954
 
1955
-    /**
1956
-     * Get the error message template for this sniff.
1957
-     *
1958
-     * @return string
1959
-     */
1960
-    protected function getErrorMsgTemplate()
1961
-    {
1962
-        return 'The function %s() is not present in PHP version %s or earlier';
1963
-    }
1955
+	/**
1956
+	 * Get the error message template for this sniff.
1957
+	 *
1958
+	 * @return string
1959
+	 */
1960
+	protected function getErrorMsgTemplate()
1961
+	{
1962
+		return 'The function %s() is not present in PHP version %s or earlier';
1963
+	}
1964 1964
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/FunctionUse/NewFunctionParametersSniff.php 1 patch
Indentation   +1032 added lines, -1032 removed lines patch added patch discarded remove patch
@@ -22,1065 +22,1065 @@
 block discarded – undo
22 22
  */
23 23
 class NewFunctionParametersSniff extends AbstractNewFeatureSniff
24 24
 {
25
-    /**
26
-     * A list of new functions, not present in older versions.
27
-     *
28
-     * The array lists : version number with false (not present) or true (present).
29
-     * The index is the location of the parameter in the parameter list, starting at 0 !
30
-     * If's sufficient to list the first version where the function appears.
31
-     *
32
-     * @var array
33
-     */
34
-    protected $newFunctionParameters = array(
35
-        'array_filter' => array(
36
-            2 => array(
37
-                'name' => 'flag',
38
-                '5.5'  => false,
39
-                '5.6'  => true,
40
-            ),
41
-        ),
42
-        'array_slice' => array(
43
-            1 => array(
44
-                'name'  => 'preserve_keys',
45
-                '5.0.1' => false,
46
-                '5.0.2' => true,
47
-            ),
48
-        ),
49
-        'array_unique' => array(
50
-            1 => array(
51
-                'name'  => 'sort_flags',
52
-                '5.2.8' => false,
53
-                '5.2.9' => true,
54
-            ),
55
-        ),
56
-        'assert' => array(
57
-            1 => array(
58
-                'name'  => 'description',
59
-                '5.4.7' => false,
60
-                '5.4.8' => true,
61
-            ),
62
-        ),
63
-        'base64_decode' => array(
64
-            1 => array(
65
-                'name' => 'strict',
66
-                '5.1'  => false,
67
-                '5.2'  => true,
68
-            ),
69
-        ),
70
-        'bcmod' => array(
71
-            2 => array(
72
-                'name' => 'scale',
73
-                '7.1'  => false,
74
-                '7.2'  => true,
75
-            ),
76
-        ),
77
-        'class_implements' => array(
78
-            1 => array(
79
-                'name' => 'autoload',
80
-                '5.0'  => false,
81
-                '5.1'  => true,
82
-            ),
83
-        ),
84
-        'class_parents' => array(
85
-            1 => array(
86
-                'name' => 'autoload',
87
-                '5.0'  => false,
88
-                '5.1'  => true,
89
-            ),
90
-        ),
91
-        'clearstatcache' => array(
92
-            0 => array(
93
-                'name' => 'clear_realpath_cache',
94
-                '5.2'  => false,
95
-                '5.3'  => true,
96
-            ),
97
-            1 => array(
98
-                'name' => 'filename',
99
-                '5.2'  => false,
100
-                '5.3'  => true,
101
-            ),
102
-        ),
103
-        'copy' => array(
104
-            2 => array(
105
-                'name' => 'context',
106
-                '5.2'  => false,
107
-                '5.3'  => true,
108
-            ),
109
-        ),
110
-        'curl_multi_info_read' => array(
111
-            1 => array(
112
-                'name' => 'msgs_in_queue',
113
-                '5.1'  => false,
114
-                '5.2'  => true,
115
-            ),
116
-        ),
117
-        'debug_backtrace' => array(
118
-            0 => array(
119
-                'name'  => 'options',
120
-                '5.2.4' => false,
121
-                '5.2.5' => true,
122
-            ),
123
-            1 => array(
124
-                'name' => 'limit',
125
-                '5.3'  => false,
126
-                '5.4'  => true,
127
-            ),
128
-        ),
129
-        'debug_print_backtrace' => array(
130
-            0 => array(
131
-                'name'  => 'options',
132
-                '5.3.5' => false,
133
-                '5.3.6' => true,
134
-            ),
135
-            1 => array(
136
-                'name' => 'limit',
137
-                '5.3'  => false,
138
-                '5.4'  => true,
139
-            ),
140
-        ),
141
-        'dirname' => array(
142
-            1 => array(
143
-                'name' => 'levels',
144
-                '5.6'  => false,
145
-                '7.0'  => true,
146
-            ),
147
-        ),
148
-        'dns_get_record' => array(
149
-            4 => array(
150
-                'name' => 'raw',
151
-                '5.3'  => false,
152
-                '5.4'  => true,
153
-            ),
154
-        ),
155
-        'fgetcsv' => array(
156
-            4 => array(
157
-                'name' => 'escape',
158
-                '5.2'  => false,
159
-                '5.3'  => true,
160
-            ),
161
-        ),
162
-        'fputcsv' => array(
163
-            4 => array(
164
-                'name'  => 'escape_char',
165
-                '5.5.3' => false,
166
-                '5.5.4' => true,
167
-            ),
168
-        ),
169
-        'file_get_contents' => array(
170
-            3 => array(
171
-                'name' => 'offset',
172
-                '5.0'  => false,
173
-                '5.1'  => true,
174
-            ),
175
-            4 => array(
176
-                'name' => 'maxlen',
177
-                '5.0'  => false,
178
-                '5.1'  => true,
179
-            ),
180
-        ),
181
-        'filter_input_array' => array(
182
-            2 => array(
183
-                'name' => 'add_empty',
184
-                '5.3'  => false,
185
-                '5.4'  => true,
186
-            ),
187
-        ),
188
-        'filter_var_array' => array(
189
-            2 => array(
190
-                'name' => 'add_empty',
191
-                '5.3'  => false,
192
-                '5.4'  => true,
193
-            ),
194
-        ),
195
-        'getenv' => array(
196
-            1 => array(
197
-                'name'   => 'local_only',
198
-                '5.5.37' => false,
199
-                '5.5.38' => true, // Also introduced in PHP 5.6.24 and 7.0.9.
200
-            ),
201
-        ),
202
-        'getopt' => array(
203
-            2 => array(
204
-                'name' => 'optind',
205
-                '7.0'  => false,
206
-                '7.1'  => true,
207
-            ),
208
-        ),
209
-        'gettimeofday' => array(
210
-            0 => array(
211
-                'name' => 'return_float',
212
-                '5.0'  => false,
213
-                '5.1'  => true,
214
-            ),
215
-        ),
216
-        'get_defined_functions' => array(
217
-            0 => array(
218
-                'name'   => 'exclude_disabled',
219
-                '7.0.14' => false,
220
-                '7.0.15' => true,
221
-            ),
222
-        ),
223
-        'get_headers' => array(
224
-            2 => array(
225
-                'name' => 'context',
226
-                '7.0'  => false,
227
-                '7.1'  => true,
228
-            ),
229
-        ),
230
-        'get_html_translation_table' => array(
231
-            2 => array(
232
-                'name'  => 'encoding',
233
-                '5.3.3' => false,
234
-                '5.3.4' => true,
235
-            ),
236
-        ),
237
-        'get_loaded_extensions' => array(
238
-            0 => array(
239
-                'name'  => 'zend_extensions',
240
-                '5.2.3' => false,
241
-                '5.2.4' => true,
242
-            ),
243
-        ),
244
-        'gzcompress' => array(
245
-            2 => array(
246
-                'name' => 'encoding',
247
-                '5.3'  => false,
248
-                '5.4'  => true,
249
-            ),
250
-        ),
251
-        'gzdeflate' => array(
252
-            2 => array(
253
-                'name' => 'encoding',
254
-                '5.3'  => false,
255
-                '5.4'  => true,
256
-            ),
257
-        ),
258
-        'htmlentities' => array(
259
-            3 => array(
260
-                'name'  => 'double_encode',
261
-                '5.2.2' => false,
262
-                '5.2.3' => true,
263
-            ),
264
-        ),
265
-        'htmlspecialchars' => array(
266
-            3 => array(
267
-                'name'  => 'double_encode',
268
-                '5.2.2' => false,
269
-                '5.2.3' => true,
270
-            ),
271
-        ),
272
-        'http_build_query' => array(
273
-            2 => array(
274
-                'name'  => 'arg_separator',
275
-                '5.1.1' => false,
276
-                '5.1.2' => true,
277
-            ),
278
-            3 => array(
279
-                'name' => 'enc_type',
280
-                '5.3'  => false,
281
-                '5.4'  => true,
282
-            ),
283
-        ),
284
-        'idn_to_ascii' => array(
285
-            2 => array(
286
-                'name' => 'variant',
287
-                '5.3'  => false,
288
-                '5.4'  => true,
289
-            ),
290
-            3 => array(
291
-                'name' => 'idna_info',
292
-                '5.3'  => false,
293
-                '5.4'  => true,
294
-            ),
295
-        ),
296
-        'idn_to_utf8' => array(
297
-            2 => array(
298
-                'name' => 'variant',
299
-                '5.3'  => false,
300
-                '5.4'  => true,
301
-            ),
302
-            3 => array(
303
-                'name' => 'idna_info',
304
-                '5.3'  => false,
305
-                '5.4'  => true,
306
-            ),
307
-        ),
308
-        'imagecolorset' => array(
309
-            5 => array(
310
-                'name' => 'alpha',
311
-                '5.3'  => false,
312
-                '5.4'  => true,
313
-            ),
314
-        ),
315
-        'imagepng' => array(
316
-            2 => array(
317
-                'name'  => 'quality',
318
-                '5.1.1' => false,
319
-                '5.1.2' => true,
320
-            ),
321
-            3 => array(
322
-                'name'  => 'filters',
323
-                '5.1.2' => false,
324
-                '5.1.3' => true,
325
-            ),
326
-        ),
327
-        'imagerotate' => array(
328
-            3 => array(
329
-                'name' => 'ignore_transparent',
330
-                '5.0'  => false,
331
-                '5.1'  => true,
332
-            ),
333
-        ),
334
-        'imap_open' => array(
335
-            4 => array(
336
-                'name' => 'n_retries',
337
-                '5.1'  => false,
338
-                '5.2'  => true,
339
-            ),
340
-            5 => array(
341
-                'name'  => 'params',
342
-                '5.3.1' => false,
343
-                '5.3.2' => true,
344
-            ),
345
-        ),
346
-        'imap_reopen' => array(
347
-            3 => array(
348
-                'name' => 'n_retries',
349
-                '5.1'  => false,
350
-                '5.2'  => true,
351
-            ),
352
-        ),
353
-        'ini_get_all' => array(
354
-            1 => array(
355
-                'name' => 'details',
356
-                '5.2'  => false,
357
-                '5.3'  => true,
358
-            ),
359
-        ),
360
-        'is_a' => array(
361
-            2 => array(
362
-                'name'  => 'allow_string',
363
-                '5.3.8' => false,
364
-                '5.3.9' => true,
365
-            ),
366
-        ),
367
-        'is_subclass_of' => array(
368
-            2 => array(
369
-                'name'  => 'allow_string',
370
-                '5.3.8' => false,
371
-                '5.3.9' => true,
372
-            ),
373
-        ),
374
-        'iterator_to_array' => array(
375
-            1 => array(
376
-                'name'  => 'use_keys',
377
-                '5.2.0' => false,
378
-                '5.2.1' => true,
379
-            ),
380
-        ),
381
-        'json_decode' => array(
382
-            2 => array(
383
-                'name' => 'depth',
384
-                '5.2'  => false,
385
-                '5.3'  => true,
386
-            ),
387
-            3 => array(
388
-                'name' => 'options',
389
-                '5.3'  => false,
390
-                '5.4'  => true,
391
-            ),
392
-        ),
393
-        'json_encode' => array(
394
-            1 => array(
395
-                'name' => 'options',
396
-                '5.2'  => false,
397
-                '5.3'  => true,
398
-            ),
399
-            2 => array(
400
-                'name' => 'depth',
401
-                '5.4'  => false,
402
-                '5.5'  => true,
403
-            ),
404
-        ),
405
-        'ldap_add' => array(
406
-            3 => array(
407
-                'name' => 'serverctrls',
408
-                '7.2'  => false,
409
-                '7.3'  => true,
410
-            ),
411
-        ),
412
-        'ldap_compare' => array(
413
-            4 => array(
414
-                'name' => 'serverctrls',
415
-                '7.2'  => false,
416
-                '7.3'  => true,
417
-            ),
418
-        ),
419
-        'ldap_delete' => array(
420
-            2 => array(
421
-                'name' => 'serverctrls',
422
-                '7.2'  => false,
423
-                '7.3'  => true,
424
-            ),
425
-        ),
426
-        'ldap_list' => array(
427
-            8 => array(
428
-                'name' => 'serverctrls',
429
-                '7.2'  => false,
430
-                '7.3'  => true,
431
-            ),
432
-        ),
433
-        'ldap_mod_add' => array(
434
-            3 => array(
435
-                'name' => 'serverctrls',
436
-                '7.2'  => false,
437
-                '7.3'  => true,
438
-            ),
439
-        ),
440
-        'ldap_mod_del' => array(
441
-            3 => array(
442
-                'name' => 'serverctrls',
443
-                '7.2'  => false,
444
-                '7.3'  => true,
445
-            ),
446
-        ),
447
-        'ldap_mod_replace' => array(
448
-            3 => array(
449
-                'name' => 'serverctrls',
450
-                '7.2'  => false,
451
-                '7.3'  => true,
452
-            ),
453
-        ),
454
-        'ldap_modify_batch' => array(
455
-            3 => array(
456
-                'name' => 'serverctrls',
457
-                '7.2'  => false,
458
-                '7.3'  => true,
459
-            ),
460
-        ),
461
-        'ldap_parse_result' => array(
462
-            6 => array(
463
-                'name' => 'serverctrls',
464
-                '7.2'  => false,
465
-                '7.3'  => true,
466
-            ),
467
-        ),
468
-        'ldap_read' => array(
469
-            8 => array(
470
-                'name' => 'serverctrls',
471
-                '7.2'  => false,
472
-                '7.3'  => true,
473
-            ),
474
-        ),
475
-        'ldap_rename' => array(
476
-            5 => array(
477
-                'name' => 'serverctrls',
478
-                '7.2'  => false,
479
-                '7.3'  => true,
480
-            ),
481
-        ),
482
-        'ldap_search' => array(
483
-            8 => array(
484
-                'name' => 'serverctrls',
485
-                '7.2'  => false,
486
-                '7.3'  => true,
487
-            ),
488
-        ),
489
-        'memory_get_peak_usage' => array(
490
-            0 => array(
491
-                'name' => 'real_usage',
492
-                '5.1'  => false,
493
-                '5.2'  => true,
494
-            ),
495
-        ),
496
-        'memory_get_usage' => array(
497
-            0 => array(
498
-                'name' => 'real_usage',
499
-                '5.1'  => false,
500
-                '5.2'  => true,
501
-            ),
502
-        ),
503
-        'mb_encode_numericentity' => array(
504
-            3 => array(
505
-                'name' => 'is_hex',
506
-                '5.3'  => false,
507
-                '5.4'  => true,
508
-            ),
509
-        ),
510
-        'mb_strrpos' => array(
511
-            /*
25
+	/**
26
+	 * A list of new functions, not present in older versions.
27
+	 *
28
+	 * The array lists : version number with false (not present) or true (present).
29
+	 * The index is the location of the parameter in the parameter list, starting at 0 !
30
+	 * If's sufficient to list the first version where the function appears.
31
+	 *
32
+	 * @var array
33
+	 */
34
+	protected $newFunctionParameters = array(
35
+		'array_filter' => array(
36
+			2 => array(
37
+				'name' => 'flag',
38
+				'5.5'  => false,
39
+				'5.6'  => true,
40
+			),
41
+		),
42
+		'array_slice' => array(
43
+			1 => array(
44
+				'name'  => 'preserve_keys',
45
+				'5.0.1' => false,
46
+				'5.0.2' => true,
47
+			),
48
+		),
49
+		'array_unique' => array(
50
+			1 => array(
51
+				'name'  => 'sort_flags',
52
+				'5.2.8' => false,
53
+				'5.2.9' => true,
54
+			),
55
+		),
56
+		'assert' => array(
57
+			1 => array(
58
+				'name'  => 'description',
59
+				'5.4.7' => false,
60
+				'5.4.8' => true,
61
+			),
62
+		),
63
+		'base64_decode' => array(
64
+			1 => array(
65
+				'name' => 'strict',
66
+				'5.1'  => false,
67
+				'5.2'  => true,
68
+			),
69
+		),
70
+		'bcmod' => array(
71
+			2 => array(
72
+				'name' => 'scale',
73
+				'7.1'  => false,
74
+				'7.2'  => true,
75
+			),
76
+		),
77
+		'class_implements' => array(
78
+			1 => array(
79
+				'name' => 'autoload',
80
+				'5.0'  => false,
81
+				'5.1'  => true,
82
+			),
83
+		),
84
+		'class_parents' => array(
85
+			1 => array(
86
+				'name' => 'autoload',
87
+				'5.0'  => false,
88
+				'5.1'  => true,
89
+			),
90
+		),
91
+		'clearstatcache' => array(
92
+			0 => array(
93
+				'name' => 'clear_realpath_cache',
94
+				'5.2'  => false,
95
+				'5.3'  => true,
96
+			),
97
+			1 => array(
98
+				'name' => 'filename',
99
+				'5.2'  => false,
100
+				'5.3'  => true,
101
+			),
102
+		),
103
+		'copy' => array(
104
+			2 => array(
105
+				'name' => 'context',
106
+				'5.2'  => false,
107
+				'5.3'  => true,
108
+			),
109
+		),
110
+		'curl_multi_info_read' => array(
111
+			1 => array(
112
+				'name' => 'msgs_in_queue',
113
+				'5.1'  => false,
114
+				'5.2'  => true,
115
+			),
116
+		),
117
+		'debug_backtrace' => array(
118
+			0 => array(
119
+				'name'  => 'options',
120
+				'5.2.4' => false,
121
+				'5.2.5' => true,
122
+			),
123
+			1 => array(
124
+				'name' => 'limit',
125
+				'5.3'  => false,
126
+				'5.4'  => true,
127
+			),
128
+		),
129
+		'debug_print_backtrace' => array(
130
+			0 => array(
131
+				'name'  => 'options',
132
+				'5.3.5' => false,
133
+				'5.3.6' => true,
134
+			),
135
+			1 => array(
136
+				'name' => 'limit',
137
+				'5.3'  => false,
138
+				'5.4'  => true,
139
+			),
140
+		),
141
+		'dirname' => array(
142
+			1 => array(
143
+				'name' => 'levels',
144
+				'5.6'  => false,
145
+				'7.0'  => true,
146
+			),
147
+		),
148
+		'dns_get_record' => array(
149
+			4 => array(
150
+				'name' => 'raw',
151
+				'5.3'  => false,
152
+				'5.4'  => true,
153
+			),
154
+		),
155
+		'fgetcsv' => array(
156
+			4 => array(
157
+				'name' => 'escape',
158
+				'5.2'  => false,
159
+				'5.3'  => true,
160
+			),
161
+		),
162
+		'fputcsv' => array(
163
+			4 => array(
164
+				'name'  => 'escape_char',
165
+				'5.5.3' => false,
166
+				'5.5.4' => true,
167
+			),
168
+		),
169
+		'file_get_contents' => array(
170
+			3 => array(
171
+				'name' => 'offset',
172
+				'5.0'  => false,
173
+				'5.1'  => true,
174
+			),
175
+			4 => array(
176
+				'name' => 'maxlen',
177
+				'5.0'  => false,
178
+				'5.1'  => true,
179
+			),
180
+		),
181
+		'filter_input_array' => array(
182
+			2 => array(
183
+				'name' => 'add_empty',
184
+				'5.3'  => false,
185
+				'5.4'  => true,
186
+			),
187
+		),
188
+		'filter_var_array' => array(
189
+			2 => array(
190
+				'name' => 'add_empty',
191
+				'5.3'  => false,
192
+				'5.4'  => true,
193
+			),
194
+		),
195
+		'getenv' => array(
196
+			1 => array(
197
+				'name'   => 'local_only',
198
+				'5.5.37' => false,
199
+				'5.5.38' => true, // Also introduced in PHP 5.6.24 and 7.0.9.
200
+			),
201
+		),
202
+		'getopt' => array(
203
+			2 => array(
204
+				'name' => 'optind',
205
+				'7.0'  => false,
206
+				'7.1'  => true,
207
+			),
208
+		),
209
+		'gettimeofday' => array(
210
+			0 => array(
211
+				'name' => 'return_float',
212
+				'5.0'  => false,
213
+				'5.1'  => true,
214
+			),
215
+		),
216
+		'get_defined_functions' => array(
217
+			0 => array(
218
+				'name'   => 'exclude_disabled',
219
+				'7.0.14' => false,
220
+				'7.0.15' => true,
221
+			),
222
+		),
223
+		'get_headers' => array(
224
+			2 => array(
225
+				'name' => 'context',
226
+				'7.0'  => false,
227
+				'7.1'  => true,
228
+			),
229
+		),
230
+		'get_html_translation_table' => array(
231
+			2 => array(
232
+				'name'  => 'encoding',
233
+				'5.3.3' => false,
234
+				'5.3.4' => true,
235
+			),
236
+		),
237
+		'get_loaded_extensions' => array(
238
+			0 => array(
239
+				'name'  => 'zend_extensions',
240
+				'5.2.3' => false,
241
+				'5.2.4' => true,
242
+			),
243
+		),
244
+		'gzcompress' => array(
245
+			2 => array(
246
+				'name' => 'encoding',
247
+				'5.3'  => false,
248
+				'5.4'  => true,
249
+			),
250
+		),
251
+		'gzdeflate' => array(
252
+			2 => array(
253
+				'name' => 'encoding',
254
+				'5.3'  => false,
255
+				'5.4'  => true,
256
+			),
257
+		),
258
+		'htmlentities' => array(
259
+			3 => array(
260
+				'name'  => 'double_encode',
261
+				'5.2.2' => false,
262
+				'5.2.3' => true,
263
+			),
264
+		),
265
+		'htmlspecialchars' => array(
266
+			3 => array(
267
+				'name'  => 'double_encode',
268
+				'5.2.2' => false,
269
+				'5.2.3' => true,
270
+			),
271
+		),
272
+		'http_build_query' => array(
273
+			2 => array(
274
+				'name'  => 'arg_separator',
275
+				'5.1.1' => false,
276
+				'5.1.2' => true,
277
+			),
278
+			3 => array(
279
+				'name' => 'enc_type',
280
+				'5.3'  => false,
281
+				'5.4'  => true,
282
+			),
283
+		),
284
+		'idn_to_ascii' => array(
285
+			2 => array(
286
+				'name' => 'variant',
287
+				'5.3'  => false,
288
+				'5.4'  => true,
289
+			),
290
+			3 => array(
291
+				'name' => 'idna_info',
292
+				'5.3'  => false,
293
+				'5.4'  => true,
294
+			),
295
+		),
296
+		'idn_to_utf8' => array(
297
+			2 => array(
298
+				'name' => 'variant',
299
+				'5.3'  => false,
300
+				'5.4'  => true,
301
+			),
302
+			3 => array(
303
+				'name' => 'idna_info',
304
+				'5.3'  => false,
305
+				'5.4'  => true,
306
+			),
307
+		),
308
+		'imagecolorset' => array(
309
+			5 => array(
310
+				'name' => 'alpha',
311
+				'5.3'  => false,
312
+				'5.4'  => true,
313
+			),
314
+		),
315
+		'imagepng' => array(
316
+			2 => array(
317
+				'name'  => 'quality',
318
+				'5.1.1' => false,
319
+				'5.1.2' => true,
320
+			),
321
+			3 => array(
322
+				'name'  => 'filters',
323
+				'5.1.2' => false,
324
+				'5.1.3' => true,
325
+			),
326
+		),
327
+		'imagerotate' => array(
328
+			3 => array(
329
+				'name' => 'ignore_transparent',
330
+				'5.0'  => false,
331
+				'5.1'  => true,
332
+			),
333
+		),
334
+		'imap_open' => array(
335
+			4 => array(
336
+				'name' => 'n_retries',
337
+				'5.1'  => false,
338
+				'5.2'  => true,
339
+			),
340
+			5 => array(
341
+				'name'  => 'params',
342
+				'5.3.1' => false,
343
+				'5.3.2' => true,
344
+			),
345
+		),
346
+		'imap_reopen' => array(
347
+			3 => array(
348
+				'name' => 'n_retries',
349
+				'5.1'  => false,
350
+				'5.2'  => true,
351
+			),
352
+		),
353
+		'ini_get_all' => array(
354
+			1 => array(
355
+				'name' => 'details',
356
+				'5.2'  => false,
357
+				'5.3'  => true,
358
+			),
359
+		),
360
+		'is_a' => array(
361
+			2 => array(
362
+				'name'  => 'allow_string',
363
+				'5.3.8' => false,
364
+				'5.3.9' => true,
365
+			),
366
+		),
367
+		'is_subclass_of' => array(
368
+			2 => array(
369
+				'name'  => 'allow_string',
370
+				'5.3.8' => false,
371
+				'5.3.9' => true,
372
+			),
373
+		),
374
+		'iterator_to_array' => array(
375
+			1 => array(
376
+				'name'  => 'use_keys',
377
+				'5.2.0' => false,
378
+				'5.2.1' => true,
379
+			),
380
+		),
381
+		'json_decode' => array(
382
+			2 => array(
383
+				'name' => 'depth',
384
+				'5.2'  => false,
385
+				'5.3'  => true,
386
+			),
387
+			3 => array(
388
+				'name' => 'options',
389
+				'5.3'  => false,
390
+				'5.4'  => true,
391
+			),
392
+		),
393
+		'json_encode' => array(
394
+			1 => array(
395
+				'name' => 'options',
396
+				'5.2'  => false,
397
+				'5.3'  => true,
398
+			),
399
+			2 => array(
400
+				'name' => 'depth',
401
+				'5.4'  => false,
402
+				'5.5'  => true,
403
+			),
404
+		),
405
+		'ldap_add' => array(
406
+			3 => array(
407
+				'name' => 'serverctrls',
408
+				'7.2'  => false,
409
+				'7.3'  => true,
410
+			),
411
+		),
412
+		'ldap_compare' => array(
413
+			4 => array(
414
+				'name' => 'serverctrls',
415
+				'7.2'  => false,
416
+				'7.3'  => true,
417
+			),
418
+		),
419
+		'ldap_delete' => array(
420
+			2 => array(
421
+				'name' => 'serverctrls',
422
+				'7.2'  => false,
423
+				'7.3'  => true,
424
+			),
425
+		),
426
+		'ldap_list' => array(
427
+			8 => array(
428
+				'name' => 'serverctrls',
429
+				'7.2'  => false,
430
+				'7.3'  => true,
431
+			),
432
+		),
433
+		'ldap_mod_add' => array(
434
+			3 => array(
435
+				'name' => 'serverctrls',
436
+				'7.2'  => false,
437
+				'7.3'  => true,
438
+			),
439
+		),
440
+		'ldap_mod_del' => array(
441
+			3 => array(
442
+				'name' => 'serverctrls',
443
+				'7.2'  => false,
444
+				'7.3'  => true,
445
+			),
446
+		),
447
+		'ldap_mod_replace' => array(
448
+			3 => array(
449
+				'name' => 'serverctrls',
450
+				'7.2'  => false,
451
+				'7.3'  => true,
452
+			),
453
+		),
454
+		'ldap_modify_batch' => array(
455
+			3 => array(
456
+				'name' => 'serverctrls',
457
+				'7.2'  => false,
458
+				'7.3'  => true,
459
+			),
460
+		),
461
+		'ldap_parse_result' => array(
462
+			6 => array(
463
+				'name' => 'serverctrls',
464
+				'7.2'  => false,
465
+				'7.3'  => true,
466
+			),
467
+		),
468
+		'ldap_read' => array(
469
+			8 => array(
470
+				'name' => 'serverctrls',
471
+				'7.2'  => false,
472
+				'7.3'  => true,
473
+			),
474
+		),
475
+		'ldap_rename' => array(
476
+			5 => array(
477
+				'name' => 'serverctrls',
478
+				'7.2'  => false,
479
+				'7.3'  => true,
480
+			),
481
+		),
482
+		'ldap_search' => array(
483
+			8 => array(
484
+				'name' => 'serverctrls',
485
+				'7.2'  => false,
486
+				'7.3'  => true,
487
+			),
488
+		),
489
+		'memory_get_peak_usage' => array(
490
+			0 => array(
491
+				'name' => 'real_usage',
492
+				'5.1'  => false,
493
+				'5.2'  => true,
494
+			),
495
+		),
496
+		'memory_get_usage' => array(
497
+			0 => array(
498
+				'name' => 'real_usage',
499
+				'5.1'  => false,
500
+				'5.2'  => true,
501
+			),
502
+		),
503
+		'mb_encode_numericentity' => array(
504
+			3 => array(
505
+				'name' => 'is_hex',
506
+				'5.3'  => false,
507
+				'5.4'  => true,
508
+			),
509
+		),
510
+		'mb_strrpos' => array(
511
+			/*
512 512
              * Note: the actual position is 2, but the original 3rd
513 513
              * parameter 'encoding' was moved to the 4th position.
514 514
              * So the only way to detect if offset is used is when
515 515
              * both offset and encoding are set.
516 516
              */
517
-            3 => array(
518
-                'name' => 'offset',
519
-                '5.1'  => false,
520
-                '5.2'  => true,
521
-            ),
522
-        ),
523
-        'mssql_connect' => array(
524
-            3 => array(
525
-                'name' => 'new_link',
526
-                '5.0'  => false,
527
-                '5.1'  => true,
528
-            ),
529
-        ),
530
-        'mysqli_commit' => array(
531
-            1 => array(
532
-                'name' => 'flags',
533
-                '5.4'  => false,
534
-                '5.5'  => true,
535
-            ),
536
-            2 => array(
537
-                'name' => 'name',
538
-                '5.4'  => false,
539
-                '5.5'  => true,
540
-            ),
541
-        ),
542
-        'mysqli_rollback' => array(
543
-            1 => array(
544
-                'name' => 'flags',
545
-                '5.4'  => false,
546
-                '5.5'  => true,
547
-            ),
548
-            2 => array(
549
-                'name' => 'name',
550
-                '5.4'  => false,
551
-                '5.5'  => true,
552
-            ),
553
-        ),
554
-        'nl2br' => array(
555
-            1 => array(
556
-                'name' => 'is_xhtml',
557
-                '5.2'  => false,
558
-                '5.3'  => true,
559
-            ),
560
-        ),
561
-        'openssl_decrypt' => array(
562
-            4 => array(
563
-                'name'  => 'iv',
564
-                '5.3.2' => false,
565
-                '5.3.3' => true,
566
-            ),
567
-            5 => array(
568
-                'name' => 'tag',
569
-                '7.0'  => false,
570
-                '7.1'  => true,
571
-            ),
572
-            6 => array(
573
-                'name' => 'aad',
574
-                '7.0'  => false,
575
-                '7.1'  => true,
576
-            ),
577
-        ),
578
-        'openssl_encrypt' => array(
579
-            4 => array(
580
-                'name'  => 'iv',
581
-                '5.3.2' => false,
582
-                '5.3.3' => true,
583
-            ),
584
-            5 => array(
585
-                'name' => 'tag',
586
-                '7.0'  => false,
587
-                '7.1'  => true,
588
-            ),
589
-            6 => array(
590
-                'name' => 'aad',
591
-                '7.0'  => false,
592
-                '7.1'  => true,
593
-            ),
594
-            7 => array(
595
-                'name' => 'tag_length',
596
-                '7.0'  => false,
597
-                '7.1'  => true,
598
-            ),
599
-        ),
600
-        'openssl_open' => array(
601
-            4 => array(
602
-                'name' => 'method',
603
-                '5.2'  => false,
604
-                '5.3'  => true,
605
-            ),
606
-            5 => array(
607
-                'name' => 'iv',
608
-                '5.6'  => false,
609
-                '7.0'  => true,
610
-            ),
611
-        ),
612
-        'openssl_pkcs7_verify' => array(
613
-            5 => array(
614
-                'name' => 'content',
615
-                '5.0'  => false,
616
-                '5.1'  => true,
617
-            ),
618
-            6 => array(
619
-                'name' => 'p7bfilename',
620
-                '7.1'  => false,
621
-                '7.2'  => true,
622
-            ),
623
-        ),
624
-        'openssl_seal' => array(
625
-            4 => array(
626
-                'name' => 'method',
627
-                '5.2'  => false,
628
-                '5.3'  => true,
629
-            ),
630
-            5 => array(
631
-                'name' => 'iv',
632
-                '5.6'  => false,
633
-                '7.0'  => true,
634
-            ),
635
-        ),
636
-        'openssl_verify' => array(
637
-            3 => array(
638
-                'name' => 'signature_alg',
639
-                '5.1'  => false,
640
-                '5.2'  => true,
641
-            ),
642
-        ),
643
-        'parse_ini_file' => array(
644
-            2 => array(
645
-                'name' => 'scanner_mode',
646
-                '5.2'  => false,
647
-                '5.3'  => true,
648
-            ),
649
-        ),
650
-        'parse_url' => array(
651
-            1 => array(
652
-                'name'  => 'component',
653
-                '5.1.1' => false,
654
-                '5.1.2' => true,
655
-            ),
656
-        ),
657
-        'pg_fetch_all' => array(
658
-            1 => array(
659
-                'name' => 'result_type',
660
-                '7.0'  => false,
661
-                '7.1'  => true,
662
-            ),
663
-        ),
664
-        'pg_last_notice' => array(
665
-            1 => array(
666
-                'name' => 'option',
667
-                '7.0'  => false,
668
-                '7.1'  => true,
669
-            ),
670
-        ),
671
-        'pg_lo_create' => array(
672
-            1 => array(
673
-                'name' => 'object_id',
674
-                '5.2'  => false,
675
-                '5.3'  => true,
676
-            ),
677
-        ),
678
-        'pg_lo_import' => array(
679
-            2 => array(
680
-                'name' => 'object_id',
681
-                '5.2'  => false,
682
-                '5.3'  => true,
683
-            ),
684
-        ),
685
-        'pg_select' => array(
686
-            4 => array(
687
-                'name' => 'result_type',
688
-                '7.0'  => false,
689
-                '7.1'  => true,
690
-            ),
691
-        ),
692
-        'php_uname' => array(
693
-            0 => array(
694
-                'name' => 'mode',
695
-                '4.2'  => false,
696
-                '4.3'  => true,
697
-            ),
698
-        ),
699
-        'preg_replace' => array(
700
-            4 => array(
701
-                'name' => 'count',
702
-                '5.0'  => false,
703
-                '5.1'  => true,
704
-            ),
705
-        ),
706
-        'preg_replace_callback' => array(
707
-            4 => array(
708
-                'name' => 'count',
709
-                '5.0'  => false,
710
-                '5.1'  => true,
711
-            ),
712
-            5 => array(
713
-                'name' => 'flags',
714
-                '7.3'  => false,
715
-                '7.4'  => true,
716
-            ),
717
-        ),
718
-        'preg_replace_callback_array' => array(
719
-            4 => array(
720
-                'name' => 'flags',
721
-                '7.3'  => false,
722
-                '7.4'  => true,
723
-            ),
724
-        ),
725
-        'round' => array(
726
-            2 => array(
727
-                'name' => 'mode',
728
-                '5.2'  => false,
729
-                '5.3'  => true,
730
-            ),
731
-        ),
732
-        'sem_acquire' => array(
733
-            1 => array(
734
-                'name'  => 'nowait',
735
-                '5.6'   => false,
736
-                '5.6.1' => true,
737
-            ),
738
-        ),
739
-        'session_regenerate_id' => array(
740
-            0 => array(
741
-                'name' => 'delete_old_session',
742
-                '5.0'  => false,
743
-                '5.1'  => true,
744
-            ),
745
-        ),
746
-        'session_set_cookie_params' => array(
747
-            4 => array(
748
-                'name' => 'httponly',
749
-                '5.1'  => false,
750
-                '5.2'  => true,
751
-            ),
752
-        ),
753
-        'session_set_save_handler' => array(
754
-            6 => array(
755
-                'name'  => 'create_sid',
756
-                '5.5.0' => false,
757
-                '5.5.1' => true,
758
-            ),
759
-            7 => array(
760
-                'name' => 'validate_sid',
761
-                '5.6'  => false,
762
-                '7.0'  => true,
763
-            ),
764
-            8 => array(
765
-                'name' => 'update_timestamp',
766
-                '5.6'  => false,
767
-                '7.0'  => true,
768
-            ),
769
-        ),
770
-        'session_start' => array(
771
-            0 => array(
772
-                'name' => 'options',
773
-                '5.6'  => false,
774
-                '7.0'  => true,
775
-            ),
776
-        ),
777
-        'setcookie' => array(
778
-            6 => array(
779
-                'name' => 'httponly',
780
-                '5.1'  => false,
781
-                '5.2'  => true,
782
-            ),
783
-        ),
784
-        'setrawcookie' => array(
785
-            6 => array(
786
-                'name' => 'httponly',
787
-                '5.1'  => false,
788
-                '5.2'  => true,
789
-            ),
790
-        ),
791
-        'simplexml_load_file' => array(
792
-            4 => array(
793
-                'name' => 'is_prefix',
794
-                '5.1'  => false,
795
-                '5.2'  => true,
796
-            ),
797
-        ),
798
-        'simplexml_load_string' => array(
799
-            4 => array(
800
-                'name' => 'is_prefix',
801
-                '5.1'  => false,
802
-                '5.2'  => true,
803
-            ),
804
-        ),
805
-        'spl_autoload_register' => array(
806
-            2 => array(
807
-                'name' => 'prepend',
808
-                '5.2'  => false,
809
-                '5.3'  => true,
810
-            ),
811
-        ),
812
-        'stream_context_create' => array(
813
-            1 => array(
814
-                'name' => 'params',
815
-                '5.2'  => false,
816
-                '5.3'  => true,
817
-            ),
818
-        ),
819
-        'stream_copy_to_stream' => array(
820
-            3 => array(
821
-                'name' => 'offset',
822
-                '5.0'  => false,
823
-                '5.1'  => true,
824
-            ),
825
-        ),
826
-        'stream_get_contents' => array(
827
-            2 => array(
828
-                'name' => 'offset',
829
-                '5.0'  => false,
830
-                '5.1'  => true,
831
-            ),
832
-        ),
833
-        'stream_wrapper_register' => array(
834
-            2 => array(
835
-                'name'  => 'flags',
836
-                '5.2.3' => false,
837
-                '5.2.4' => true,
838
-            ),
839
-        ),
840
-        'stristr' => array(
841
-            2 => array(
842
-                'name' => 'before_needle',
843
-                '5.2'  => false,
844
-                '5.3'  => true,
845
-            ),
846
-        ),
847
-        'strstr' => array(
848
-            2 => array(
849
-                'name' => 'before_needle',
850
-                '5.2'  => false,
851
-                '5.3'  => true,
852
-            ),
853
-        ),
854
-        'str_word_count' => array(
855
-            2 => array(
856
-                'name' => 'charlist',
857
-                '5.0'  => false,
858
-                '5.1'  => true,
859
-            ),
860
-        ),
861
-        'substr_count' => array(
862
-            2 => array(
863
-                'name' => 'offset',
864
-                '5.0'  => false,
865
-                '5.1'  => true,
866
-            ),
867
-            3 => array(
868
-                'name' => 'length',
869
-                '5.0'  => false,
870
-                '5.1'  => true,
871
-            ),
872
-        ),
873
-        'sybase_connect' => array(
874
-            5 => array(
875
-                'name' => 'new',
876
-                '5.2'  => false,
877
-                '5.3'  => true,
878
-            ),
879
-        ),
880
-        'timezone_transitions_get' => array(
881
-            1 => array(
882
-                'name' => 'timestamp_begin',
883
-                '5.2'  => false,
884
-                '5.3'  => true,
885
-            ),
886
-            2 => array(
887
-                'name' => 'timestamp_end',
888
-                '5.2'  => false,
889
-                '5.3'  => true,
890
-            ),
891
-        ),
892
-        'timezone_identifiers_list' => array(
893
-            0 => array(
894
-                'name' => 'what',
895
-                '5.2'  => false,
896
-                '5.3'  => true,
897
-            ),
898
-            1 => array(
899
-                'name' => 'country',
900
-                '5.2'  => false,
901
-                '5.3'  => true,
902
-            ),
903
-        ),
904
-        'token_get_all' => array(
905
-            1 => array(
906
-                'name' => 'flags',
907
-                '5.6'  => false,
908
-                '7.0'  => true,
909
-            ),
910
-        ),
911
-        'ucwords' => array(
912
-            1 => array(
913
-                'name'   => 'delimiters',
914
-                '5.4.31' => false,
915
-                '5.5.15' => false,
916
-                '5.4.32' => true,
917
-                '5.5.16' => true,
918
-            ),
919
-        ),
920
-        'unpack' => array(
921
-            2 => array(
922
-                'name' => 'offset',
923
-                '7.0'  => false,
924
-                '7.1'  => true,
925
-            ),
926
-        ),
927
-        'unserialize' => array(
928
-            1 => array(
929
-                'name' => 'options',
930
-                '5.6'  => false,
931
-                '7.0'  => true,
932
-            ),
933
-        ),
934
-    );
517
+			3 => array(
518
+				'name' => 'offset',
519
+				'5.1'  => false,
520
+				'5.2'  => true,
521
+			),
522
+		),
523
+		'mssql_connect' => array(
524
+			3 => array(
525
+				'name' => 'new_link',
526
+				'5.0'  => false,
527
+				'5.1'  => true,
528
+			),
529
+		),
530
+		'mysqli_commit' => array(
531
+			1 => array(
532
+				'name' => 'flags',
533
+				'5.4'  => false,
534
+				'5.5'  => true,
535
+			),
536
+			2 => array(
537
+				'name' => 'name',
538
+				'5.4'  => false,
539
+				'5.5'  => true,
540
+			),
541
+		),
542
+		'mysqli_rollback' => array(
543
+			1 => array(
544
+				'name' => 'flags',
545
+				'5.4'  => false,
546
+				'5.5'  => true,
547
+			),
548
+			2 => array(
549
+				'name' => 'name',
550
+				'5.4'  => false,
551
+				'5.5'  => true,
552
+			),
553
+		),
554
+		'nl2br' => array(
555
+			1 => array(
556
+				'name' => 'is_xhtml',
557
+				'5.2'  => false,
558
+				'5.3'  => true,
559
+			),
560
+		),
561
+		'openssl_decrypt' => array(
562
+			4 => array(
563
+				'name'  => 'iv',
564
+				'5.3.2' => false,
565
+				'5.3.3' => true,
566
+			),
567
+			5 => array(
568
+				'name' => 'tag',
569
+				'7.0'  => false,
570
+				'7.1'  => true,
571
+			),
572
+			6 => array(
573
+				'name' => 'aad',
574
+				'7.0'  => false,
575
+				'7.1'  => true,
576
+			),
577
+		),
578
+		'openssl_encrypt' => array(
579
+			4 => array(
580
+				'name'  => 'iv',
581
+				'5.3.2' => false,
582
+				'5.3.3' => true,
583
+			),
584
+			5 => array(
585
+				'name' => 'tag',
586
+				'7.0'  => false,
587
+				'7.1'  => true,
588
+			),
589
+			6 => array(
590
+				'name' => 'aad',
591
+				'7.0'  => false,
592
+				'7.1'  => true,
593
+			),
594
+			7 => array(
595
+				'name' => 'tag_length',
596
+				'7.0'  => false,
597
+				'7.1'  => true,
598
+			),
599
+		),
600
+		'openssl_open' => array(
601
+			4 => array(
602
+				'name' => 'method',
603
+				'5.2'  => false,
604
+				'5.3'  => true,
605
+			),
606
+			5 => array(
607
+				'name' => 'iv',
608
+				'5.6'  => false,
609
+				'7.0'  => true,
610
+			),
611
+		),
612
+		'openssl_pkcs7_verify' => array(
613
+			5 => array(
614
+				'name' => 'content',
615
+				'5.0'  => false,
616
+				'5.1'  => true,
617
+			),
618
+			6 => array(
619
+				'name' => 'p7bfilename',
620
+				'7.1'  => false,
621
+				'7.2'  => true,
622
+			),
623
+		),
624
+		'openssl_seal' => array(
625
+			4 => array(
626
+				'name' => 'method',
627
+				'5.2'  => false,
628
+				'5.3'  => true,
629
+			),
630
+			5 => array(
631
+				'name' => 'iv',
632
+				'5.6'  => false,
633
+				'7.0'  => true,
634
+			),
635
+		),
636
+		'openssl_verify' => array(
637
+			3 => array(
638
+				'name' => 'signature_alg',
639
+				'5.1'  => false,
640
+				'5.2'  => true,
641
+			),
642
+		),
643
+		'parse_ini_file' => array(
644
+			2 => array(
645
+				'name' => 'scanner_mode',
646
+				'5.2'  => false,
647
+				'5.3'  => true,
648
+			),
649
+		),
650
+		'parse_url' => array(
651
+			1 => array(
652
+				'name'  => 'component',
653
+				'5.1.1' => false,
654
+				'5.1.2' => true,
655
+			),
656
+		),
657
+		'pg_fetch_all' => array(
658
+			1 => array(
659
+				'name' => 'result_type',
660
+				'7.0'  => false,
661
+				'7.1'  => true,
662
+			),
663
+		),
664
+		'pg_last_notice' => array(
665
+			1 => array(
666
+				'name' => 'option',
667
+				'7.0'  => false,
668
+				'7.1'  => true,
669
+			),
670
+		),
671
+		'pg_lo_create' => array(
672
+			1 => array(
673
+				'name' => 'object_id',
674
+				'5.2'  => false,
675
+				'5.3'  => true,
676
+			),
677
+		),
678
+		'pg_lo_import' => array(
679
+			2 => array(
680
+				'name' => 'object_id',
681
+				'5.2'  => false,
682
+				'5.3'  => true,
683
+			),
684
+		),
685
+		'pg_select' => array(
686
+			4 => array(
687
+				'name' => 'result_type',
688
+				'7.0'  => false,
689
+				'7.1'  => true,
690
+			),
691
+		),
692
+		'php_uname' => array(
693
+			0 => array(
694
+				'name' => 'mode',
695
+				'4.2'  => false,
696
+				'4.3'  => true,
697
+			),
698
+		),
699
+		'preg_replace' => array(
700
+			4 => array(
701
+				'name' => 'count',
702
+				'5.0'  => false,
703
+				'5.1'  => true,
704
+			),
705
+		),
706
+		'preg_replace_callback' => array(
707
+			4 => array(
708
+				'name' => 'count',
709
+				'5.0'  => false,
710
+				'5.1'  => true,
711
+			),
712
+			5 => array(
713
+				'name' => 'flags',
714
+				'7.3'  => false,
715
+				'7.4'  => true,
716
+			),
717
+		),
718
+		'preg_replace_callback_array' => array(
719
+			4 => array(
720
+				'name' => 'flags',
721
+				'7.3'  => false,
722
+				'7.4'  => true,
723
+			),
724
+		),
725
+		'round' => array(
726
+			2 => array(
727
+				'name' => 'mode',
728
+				'5.2'  => false,
729
+				'5.3'  => true,
730
+			),
731
+		),
732
+		'sem_acquire' => array(
733
+			1 => array(
734
+				'name'  => 'nowait',
735
+				'5.6'   => false,
736
+				'5.6.1' => true,
737
+			),
738
+		),
739
+		'session_regenerate_id' => array(
740
+			0 => array(
741
+				'name' => 'delete_old_session',
742
+				'5.0'  => false,
743
+				'5.1'  => true,
744
+			),
745
+		),
746
+		'session_set_cookie_params' => array(
747
+			4 => array(
748
+				'name' => 'httponly',
749
+				'5.1'  => false,
750
+				'5.2'  => true,
751
+			),
752
+		),
753
+		'session_set_save_handler' => array(
754
+			6 => array(
755
+				'name'  => 'create_sid',
756
+				'5.5.0' => false,
757
+				'5.5.1' => true,
758
+			),
759
+			7 => array(
760
+				'name' => 'validate_sid',
761
+				'5.6'  => false,
762
+				'7.0'  => true,
763
+			),
764
+			8 => array(
765
+				'name' => 'update_timestamp',
766
+				'5.6'  => false,
767
+				'7.0'  => true,
768
+			),
769
+		),
770
+		'session_start' => array(
771
+			0 => array(
772
+				'name' => 'options',
773
+				'5.6'  => false,
774
+				'7.0'  => true,
775
+			),
776
+		),
777
+		'setcookie' => array(
778
+			6 => array(
779
+				'name' => 'httponly',
780
+				'5.1'  => false,
781
+				'5.2'  => true,
782
+			),
783
+		),
784
+		'setrawcookie' => array(
785
+			6 => array(
786
+				'name' => 'httponly',
787
+				'5.1'  => false,
788
+				'5.2'  => true,
789
+			),
790
+		),
791
+		'simplexml_load_file' => array(
792
+			4 => array(
793
+				'name' => 'is_prefix',
794
+				'5.1'  => false,
795
+				'5.2'  => true,
796
+			),
797
+		),
798
+		'simplexml_load_string' => array(
799
+			4 => array(
800
+				'name' => 'is_prefix',
801
+				'5.1'  => false,
802
+				'5.2'  => true,
803
+			),
804
+		),
805
+		'spl_autoload_register' => array(
806
+			2 => array(
807
+				'name' => 'prepend',
808
+				'5.2'  => false,
809
+				'5.3'  => true,
810
+			),
811
+		),
812
+		'stream_context_create' => array(
813
+			1 => array(
814
+				'name' => 'params',
815
+				'5.2'  => false,
816
+				'5.3'  => true,
817
+			),
818
+		),
819
+		'stream_copy_to_stream' => array(
820
+			3 => array(
821
+				'name' => 'offset',
822
+				'5.0'  => false,
823
+				'5.1'  => true,
824
+			),
825
+		),
826
+		'stream_get_contents' => array(
827
+			2 => array(
828
+				'name' => 'offset',
829
+				'5.0'  => false,
830
+				'5.1'  => true,
831
+			),
832
+		),
833
+		'stream_wrapper_register' => array(
834
+			2 => array(
835
+				'name'  => 'flags',
836
+				'5.2.3' => false,
837
+				'5.2.4' => true,
838
+			),
839
+		),
840
+		'stristr' => array(
841
+			2 => array(
842
+				'name' => 'before_needle',
843
+				'5.2'  => false,
844
+				'5.3'  => true,
845
+			),
846
+		),
847
+		'strstr' => array(
848
+			2 => array(
849
+				'name' => 'before_needle',
850
+				'5.2'  => false,
851
+				'5.3'  => true,
852
+			),
853
+		),
854
+		'str_word_count' => array(
855
+			2 => array(
856
+				'name' => 'charlist',
857
+				'5.0'  => false,
858
+				'5.1'  => true,
859
+			),
860
+		),
861
+		'substr_count' => array(
862
+			2 => array(
863
+				'name' => 'offset',
864
+				'5.0'  => false,
865
+				'5.1'  => true,
866
+			),
867
+			3 => array(
868
+				'name' => 'length',
869
+				'5.0'  => false,
870
+				'5.1'  => true,
871
+			),
872
+		),
873
+		'sybase_connect' => array(
874
+			5 => array(
875
+				'name' => 'new',
876
+				'5.2'  => false,
877
+				'5.3'  => true,
878
+			),
879
+		),
880
+		'timezone_transitions_get' => array(
881
+			1 => array(
882
+				'name' => 'timestamp_begin',
883
+				'5.2'  => false,
884
+				'5.3'  => true,
885
+			),
886
+			2 => array(
887
+				'name' => 'timestamp_end',
888
+				'5.2'  => false,
889
+				'5.3'  => true,
890
+			),
891
+		),
892
+		'timezone_identifiers_list' => array(
893
+			0 => array(
894
+				'name' => 'what',
895
+				'5.2'  => false,
896
+				'5.3'  => true,
897
+			),
898
+			1 => array(
899
+				'name' => 'country',
900
+				'5.2'  => false,
901
+				'5.3'  => true,
902
+			),
903
+		),
904
+		'token_get_all' => array(
905
+			1 => array(
906
+				'name' => 'flags',
907
+				'5.6'  => false,
908
+				'7.0'  => true,
909
+			),
910
+		),
911
+		'ucwords' => array(
912
+			1 => array(
913
+				'name'   => 'delimiters',
914
+				'5.4.31' => false,
915
+				'5.5.15' => false,
916
+				'5.4.32' => true,
917
+				'5.5.16' => true,
918
+			),
919
+		),
920
+		'unpack' => array(
921
+			2 => array(
922
+				'name' => 'offset',
923
+				'7.0'  => false,
924
+				'7.1'  => true,
925
+			),
926
+		),
927
+		'unserialize' => array(
928
+			1 => array(
929
+				'name' => 'options',
930
+				'5.6'  => false,
931
+				'7.0'  => true,
932
+			),
933
+		),
934
+	);
935 935
 
936 936
 
937
-    /**
938
-     * Returns an array of tokens this test wants to listen for.
939
-     *
940
-     * @return array
941
-     */
942
-    public function register()
943
-    {
944
-        // Handle case-insensitivity of function names.
945
-        $this->newFunctionParameters = $this->arrayKeysToLowercase($this->newFunctionParameters);
937
+	/**
938
+	 * Returns an array of tokens this test wants to listen for.
939
+	 *
940
+	 * @return array
941
+	 */
942
+	public function register()
943
+	{
944
+		// Handle case-insensitivity of function names.
945
+		$this->newFunctionParameters = $this->arrayKeysToLowercase($this->newFunctionParameters);
946 946
 
947
-        return array(\T_STRING);
948
-    }
947
+		return array(\T_STRING);
948
+	}
949 949
 
950
-    /**
951
-     * Processes this test, when one of its tokens is encountered.
952
-     *
953
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
954
-     * @param int                   $stackPtr  The position of the current token in
955
-     *                                         the stack passed in $tokens.
956
-     *
957
-     * @return void
958
-     */
959
-    public function process(File $phpcsFile, $stackPtr)
960
-    {
961
-        $tokens = $phpcsFile->getTokens();
950
+	/**
951
+	 * Processes this test, when one of its tokens is encountered.
952
+	 *
953
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
954
+	 * @param int                   $stackPtr  The position of the current token in
955
+	 *                                         the stack passed in $tokens.
956
+	 *
957
+	 * @return void
958
+	 */
959
+	public function process(File $phpcsFile, $stackPtr)
960
+	{
961
+		$tokens = $phpcsFile->getTokens();
962 962
 
963
-        $ignore = array(
964
-            \T_DOUBLE_COLON    => true,
965
-            \T_OBJECT_OPERATOR => true,
966
-            \T_FUNCTION        => true,
967
-            \T_CONST           => true,
968
-        );
963
+		$ignore = array(
964
+			\T_DOUBLE_COLON    => true,
965
+			\T_OBJECT_OPERATOR => true,
966
+			\T_FUNCTION        => true,
967
+			\T_CONST           => true,
968
+		);
969 969
 
970
-        $prevToken = $phpcsFile->findPrevious(\T_WHITESPACE, ($stackPtr - 1), null, true);
971
-        if (isset($ignore[$tokens[$prevToken]['code']]) === true) {
972
-            // Not a call to a PHP function.
973
-            return;
974
-        }
970
+		$prevToken = $phpcsFile->findPrevious(\T_WHITESPACE, ($stackPtr - 1), null, true);
971
+		if (isset($ignore[$tokens[$prevToken]['code']]) === true) {
972
+			// Not a call to a PHP function.
973
+			return;
974
+		}
975 975
 
976
-        $function   = $tokens[$stackPtr]['content'];
977
-        $functionLc = strtolower($function);
976
+		$function   = $tokens[$stackPtr]['content'];
977
+		$functionLc = strtolower($function);
978 978
 
979
-        if (isset($this->newFunctionParameters[$functionLc]) === false) {
980
-            return;
981
-        }
979
+		if (isset($this->newFunctionParameters[$functionLc]) === false) {
980
+			return;
981
+		}
982 982
 
983
-        $parameterCount = $this->getFunctionCallParameterCount($phpcsFile, $stackPtr);
984
-        if ($parameterCount === 0) {
985
-            return;
986
-        }
983
+		$parameterCount = $this->getFunctionCallParameterCount($phpcsFile, $stackPtr);
984
+		if ($parameterCount === 0) {
985
+			return;
986
+		}
987 987
 
988
-        // If the parameter count returned > 0, we know there will be valid open parenthesis.
989
-        $openParenthesis      = $phpcsFile->findNext(Tokens::$emptyTokens, $stackPtr + 1, null, true, null, true);
990
-        $parameterOffsetFound = $parameterCount - 1;
988
+		// If the parameter count returned > 0, we know there will be valid open parenthesis.
989
+		$openParenthesis      = $phpcsFile->findNext(Tokens::$emptyTokens, $stackPtr + 1, null, true, null, true);
990
+		$parameterOffsetFound = $parameterCount - 1;
991 991
 
992
-        foreach ($this->newFunctionParameters[$functionLc] as $offset => $parameterDetails) {
993
-            if ($offset <= $parameterOffsetFound) {
994
-                $itemInfo = array(
995
-                    'name'   => $function,
996
-                    'nameLc' => $functionLc,
997
-                    'offset' => $offset,
998
-                );
999
-                $this->handleFeature($phpcsFile, $openParenthesis, $itemInfo);
1000
-            }
1001
-        }
1002
-    }
992
+		foreach ($this->newFunctionParameters[$functionLc] as $offset => $parameterDetails) {
993
+			if ($offset <= $parameterOffsetFound) {
994
+				$itemInfo = array(
995
+					'name'   => $function,
996
+					'nameLc' => $functionLc,
997
+					'offset' => $offset,
998
+				);
999
+				$this->handleFeature($phpcsFile, $openParenthesis, $itemInfo);
1000
+			}
1001
+		}
1002
+	}
1003 1003
 
1004 1004
 
1005
-    /**
1006
-     * Get the relevant sub-array for a specific item from a multi-dimensional array.
1007
-     *
1008
-     * @param array $itemInfo Base information about the item.
1009
-     *
1010
-     * @return array Version and other information about the item.
1011
-     */
1012
-    public function getItemArray(array $itemInfo)
1013
-    {
1014
-        return $this->newFunctionParameters[$itemInfo['nameLc']][$itemInfo['offset']];
1015
-    }
1005
+	/**
1006
+	 * Get the relevant sub-array for a specific item from a multi-dimensional array.
1007
+	 *
1008
+	 * @param array $itemInfo Base information about the item.
1009
+	 *
1010
+	 * @return array Version and other information about the item.
1011
+	 */
1012
+	public function getItemArray(array $itemInfo)
1013
+	{
1014
+		return $this->newFunctionParameters[$itemInfo['nameLc']][$itemInfo['offset']];
1015
+	}
1016 1016
 
1017 1017
 
1018
-    /**
1019
-     * Get an array of the non-PHP-version array keys used in a sub-array.
1020
-     *
1021
-     * @return array
1022
-     */
1023
-    protected function getNonVersionArrayKeys()
1024
-    {
1025
-        return array('name');
1026
-    }
1018
+	/**
1019
+	 * Get an array of the non-PHP-version array keys used in a sub-array.
1020
+	 *
1021
+	 * @return array
1022
+	 */
1023
+	protected function getNonVersionArrayKeys()
1024
+	{
1025
+		return array('name');
1026
+	}
1027 1027
 
1028 1028
 
1029
-    /**
1030
-     * Retrieve the relevant detail (version) information for use in an error message.
1031
-     *
1032
-     * @param array $itemArray Version and other information about the item.
1033
-     * @param array $itemInfo  Base information about the item.
1034
-     *
1035
-     * @return array
1036
-     */
1037
-    public function getErrorInfo(array $itemArray, array $itemInfo)
1038
-    {
1039
-        $errorInfo              = parent::getErrorInfo($itemArray, $itemInfo);
1040
-        $errorInfo['paramName'] = $itemArray['name'];
1029
+	/**
1030
+	 * Retrieve the relevant detail (version) information for use in an error message.
1031
+	 *
1032
+	 * @param array $itemArray Version and other information about the item.
1033
+	 * @param array $itemInfo  Base information about the item.
1034
+	 *
1035
+	 * @return array
1036
+	 */
1037
+	public function getErrorInfo(array $itemArray, array $itemInfo)
1038
+	{
1039
+		$errorInfo              = parent::getErrorInfo($itemArray, $itemInfo);
1040
+		$errorInfo['paramName'] = $itemArray['name'];
1041 1041
 
1042
-        return $errorInfo;
1043
-    }
1042
+		return $errorInfo;
1043
+	}
1044 1044
 
1045 1045
 
1046
-    /**
1047
-     * Get the item name to be used for the creation of the error code.
1048
-     *
1049
-     * @param array $itemInfo  Base information about the item.
1050
-     * @param array $errorInfo Detail information about an item.
1051
-     *
1052
-     * @return string
1053
-     */
1054
-    protected function getItemName(array $itemInfo, array $errorInfo)
1055
-    {
1056
-        return $itemInfo['name'] . '_' . $errorInfo['paramName'];
1057
-    }
1046
+	/**
1047
+	 * Get the item name to be used for the creation of the error code.
1048
+	 *
1049
+	 * @param array $itemInfo  Base information about the item.
1050
+	 * @param array $errorInfo Detail information about an item.
1051
+	 *
1052
+	 * @return string
1053
+	 */
1054
+	protected function getItemName(array $itemInfo, array $errorInfo)
1055
+	{
1056
+		return $itemInfo['name'] . '_' . $errorInfo['paramName'];
1057
+	}
1058 1058
 
1059 1059
 
1060
-    /**
1061
-     * Get the error message template for this sniff.
1062
-     *
1063
-     * @return string
1064
-     */
1065
-    protected function getErrorMsgTemplate()
1066
-    {
1067
-        return 'The function %s() does not have a parameter "%s" in PHP version %s or earlier';
1068
-    }
1060
+	/**
1061
+	 * Get the error message template for this sniff.
1062
+	 *
1063
+	 * @return string
1064
+	 */
1065
+	protected function getErrorMsgTemplate()
1066
+	{
1067
+		return 'The function %s() does not have a parameter "%s" in PHP version %s or earlier';
1068
+	}
1069 1069
 
1070 1070
 
1071
-    /**
1072
-     * Allow for concrete child classes to filter the error data before it's passed to PHPCS.
1073
-     *
1074
-     * @param array $data      The error data array which was created.
1075
-     * @param array $itemInfo  Base information about the item this error message applies to.
1076
-     * @param array $errorInfo Detail information about an item this error message applies to.
1077
-     *
1078
-     * @return array
1079
-     */
1080
-    protected function filterErrorData(array $data, array $itemInfo, array $errorInfo)
1081
-    {
1082
-        array_shift($data);
1083
-        array_unshift($data, $itemInfo['name'], $errorInfo['paramName']);
1084
-        return $data;
1085
-    }
1071
+	/**
1072
+	 * Allow for concrete child classes to filter the error data before it's passed to PHPCS.
1073
+	 *
1074
+	 * @param array $data      The error data array which was created.
1075
+	 * @param array $itemInfo  Base information about the item this error message applies to.
1076
+	 * @param array $errorInfo Detail information about an item this error message applies to.
1077
+	 *
1078
+	 * @return array
1079
+	 */
1080
+	protected function filterErrorData(array $data, array $itemInfo, array $errorInfo)
1081
+	{
1082
+		array_shift($data);
1083
+		array_unshift($data, $itemInfo['name'], $errorInfo['paramName']);
1084
+		return $data;
1085
+	}
1086 1086
 }
Please login to merge, or discard this patch.
php-compatibility/PHPCompatibility/Sniffs/Keywords/NewKeywordsSniff.php 1 patch
Indentation   +323 added lines, -323 removed lines patch added patch discarded remove patch
@@ -25,196 +25,196 @@  discard block
 block discarded – undo
25 25
 class NewKeywordsSniff extends AbstractNewFeatureSniff
26 26
 {
27 27
 
28
-    /**
29
-     * A list of new keywords, not present in older versions.
30
-     *
31
-     * The array lists : version number with false (not present) or true (present).
32
-     * If's sufficient to list the last version which did not contain the keyword.
33
-     *
34
-     * Description will be used as part of the error message.
35
-     * Condition is the name of a callback method within this class or the parent class
36
-     * which checks whether the token complies with a certain condition.
37
-     * The callback function will be passed the $phpcsFile and the $stackPtr.
38
-     * The callback function should return `true` if the condition is met and the
39
-     * error should *not* be thrown.
40
-     *
41
-     * @var array(string => array(string => int|string|null))
42
-     */
43
-    protected $newKeywords = array(
44
-        'T_HALT_COMPILER' => array(
45
-            '5.0'         => false,
46
-            '5.1'         => true,
47
-            'description' => '"__halt_compiler" keyword',
48
-        ),
49
-        'T_CONST' => array(
50
-            '5.2'         => false,
51
-            '5.3'         => true,
52
-            'description' => '"const" keyword',
53
-            'condition'   => 'isClassConstant', // Keyword is only new when not in class context.
54
-        ),
55
-        'T_CALLABLE' => array(
56
-            '5.3'         => false,
57
-            '5.4'         => true,
58
-            'description' => '"callable" keyword',
59
-            'content'     => 'callable',
60
-        ),
61
-        'T_DIR' => array(
62
-            '5.2'         => false,
63
-            '5.3'         => true,
64
-            'description' => '__DIR__ magic constant',
65
-            'content'     => '__DIR__',
66
-        ),
67
-        'T_GOTO' => array(
68
-            '5.2'         => false,
69
-            '5.3'         => true,
70
-            'description' => '"goto" keyword',
71
-            'content'     => 'goto',
72
-        ),
73
-        'T_INSTEADOF' => array(
74
-            '5.3'         => false,
75
-            '5.4'         => true,
76
-            'description' => '"insteadof" keyword (for traits)',
77
-            'content'     => 'insteadof',
78
-        ),
79
-        'T_NAMESPACE' => array(
80
-            '5.2'         => false,
81
-            '5.3'         => true,
82
-            'description' => '"namespace" keyword',
83
-            'content'     => 'namespace',
84
-        ),
85
-        'T_NS_C' => array(
86
-            '5.2'         => false,
87
-            '5.3'         => true,
88
-            'description' => '__NAMESPACE__ magic constant',
89
-            'content'     => '__NAMESPACE__',
90
-        ),
91
-        'T_USE' => array(
92
-            '5.2'         => false,
93
-            '5.3'         => true,
94
-            'description' => '"use" keyword (for traits/namespaces/anonymous functions)',
95
-        ),
96
-        'T_START_NOWDOC' => array(
97
-            '5.2'         => false,
98
-            '5.3'         => true,
99
-            'description' => 'nowdoc functionality',
100
-        ),
101
-        'T_END_NOWDOC' => array(
102
-            '5.2'         => false,
103
-            '5.3'         => true,
104
-            'description' => 'nowdoc functionality',
105
-        ),
106
-        'T_START_HEREDOC' => array(
107
-            '5.2'         => false,
108
-            '5.3'         => true,
109
-            'description' => '(Double) quoted Heredoc identifier',
110
-            'condition'   => 'isNotQuoted', // Heredoc is only new with quoted identifier.
111
-        ),
112
-        'T_TRAIT' => array(
113
-            '5.3'         => false,
114
-            '5.4'         => true,
115
-            'description' => '"trait" keyword',
116
-            'content'     => 'trait',
117
-        ),
118
-        'T_TRAIT_C' => array(
119
-            '5.3'         => false,
120
-            '5.4'         => true,
121
-            'description' => '__TRAIT__ magic constant',
122
-            'content'     => '__TRAIT__',
123
-        ),
124
-        // The specifics for distinguishing between 'yield' and 'yield from' are dealt
125
-        // with in the translation logic.
126
-        // This token has to be placed above the `T_YIELD` token in this array to allow for this.
127
-        'T_YIELD_FROM' => array(
128
-            '5.6'         => false,
129
-            '7.0'         => true,
130
-            'description' => '"yield from" keyword (for generators)',
131
-            'content'     => 'yield',
132
-        ),
133
-        'T_YIELD' => array(
134
-            '5.4'         => false,
135
-            '5.5'         => true,
136
-            'description' => '"yield" keyword (for generators)',
137
-            'content'     => 'yield',
138
-        ),
139
-        'T_FINALLY' => array(
140
-            '5.4'         => false,
141
-            '5.5'         => true,
142
-            'description' => '"finally" keyword (in exception handling)',
143
-            'content'     => 'finally',
144
-        ),
145
-    );
146
-
147
-    /**
148
-     * Translation table for T_STRING tokens.
149
-     *
150
-     * Will be set up from the register() method.
151
-     *
152
-     * @var array(string => string)
153
-     */
154
-    protected $translateContentToToken = array();
155
-
156
-
157
-    /**
158
-     * Returns an array of tokens this test wants to listen for.
159
-     *
160
-     * @return array
161
-     */
162
-    public function register()
163
-    {
164
-        $tokens    = array();
165
-        $translate = array();
166
-        foreach ($this->newKeywords as $token => $versions) {
167
-            if (\defined($token)) {
168
-                $tokens[] = constant($token);
169
-            }
170
-            if (isset($versions['content'])) {
171
-                $translate[strtolower($versions['content'])] = $token;
172
-            }
173
-        }
174
-
175
-        /*
28
+	/**
29
+	 * A list of new keywords, not present in older versions.
30
+	 *
31
+	 * The array lists : version number with false (not present) or true (present).
32
+	 * If's sufficient to list the last version which did not contain the keyword.
33
+	 *
34
+	 * Description will be used as part of the error message.
35
+	 * Condition is the name of a callback method within this class or the parent class
36
+	 * which checks whether the token complies with a certain condition.
37
+	 * The callback function will be passed the $phpcsFile and the $stackPtr.
38
+	 * The callback function should return `true` if the condition is met and the
39
+	 * error should *not* be thrown.
40
+	 *
41
+	 * @var array(string => array(string => int|string|null))
42
+	 */
43
+	protected $newKeywords = array(
44
+		'T_HALT_COMPILER' => array(
45
+			'5.0'         => false,
46
+			'5.1'         => true,
47
+			'description' => '"__halt_compiler" keyword',
48
+		),
49
+		'T_CONST' => array(
50
+			'5.2'         => false,
51
+			'5.3'         => true,
52
+			'description' => '"const" keyword',
53
+			'condition'   => 'isClassConstant', // Keyword is only new when not in class context.
54
+		),
55
+		'T_CALLABLE' => array(
56
+			'5.3'         => false,
57
+			'5.4'         => true,
58
+			'description' => '"callable" keyword',
59
+			'content'     => 'callable',
60
+		),
61
+		'T_DIR' => array(
62
+			'5.2'         => false,
63
+			'5.3'         => true,
64
+			'description' => '__DIR__ magic constant',
65
+			'content'     => '__DIR__',
66
+		),
67
+		'T_GOTO' => array(
68
+			'5.2'         => false,
69
+			'5.3'         => true,
70
+			'description' => '"goto" keyword',
71
+			'content'     => 'goto',
72
+		),
73
+		'T_INSTEADOF' => array(
74
+			'5.3'         => false,
75
+			'5.4'         => true,
76
+			'description' => '"insteadof" keyword (for traits)',
77
+			'content'     => 'insteadof',
78
+		),
79
+		'T_NAMESPACE' => array(
80
+			'5.2'         => false,
81
+			'5.3'         => true,
82
+			'description' => '"namespace" keyword',
83
+			'content'     => 'namespace',
84
+		),
85
+		'T_NS_C' => array(
86
+			'5.2'         => false,
87
+			'5.3'         => true,
88
+			'description' => '__NAMESPACE__ magic constant',
89
+			'content'     => '__NAMESPACE__',
90
+		),
91
+		'T_USE' => array(
92
+			'5.2'         => false,
93
+			'5.3'         => true,
94
+			'description' => '"use" keyword (for traits/namespaces/anonymous functions)',
95
+		),
96
+		'T_START_NOWDOC' => array(
97
+			'5.2'         => false,
98
+			'5.3'         => true,
99
+			'description' => 'nowdoc functionality',
100
+		),
101
+		'T_END_NOWDOC' => array(
102
+			'5.2'         => false,
103
+			'5.3'         => true,
104
+			'description' => 'nowdoc functionality',
105
+		),
106
+		'T_START_HEREDOC' => array(
107
+			'5.2'         => false,
108
+			'5.3'         => true,
109
+			'description' => '(Double) quoted Heredoc identifier',
110
+			'condition'   => 'isNotQuoted', // Heredoc is only new with quoted identifier.
111
+		),
112
+		'T_TRAIT' => array(
113
+			'5.3'         => false,
114
+			'5.4'         => true,
115
+			'description' => '"trait" keyword',
116
+			'content'     => 'trait',
117
+		),
118
+		'T_TRAIT_C' => array(
119
+			'5.3'         => false,
120
+			'5.4'         => true,
121
+			'description' => '__TRAIT__ magic constant',
122
+			'content'     => '__TRAIT__',
123
+		),
124
+		// The specifics for distinguishing between 'yield' and 'yield from' are dealt
125
+		// with in the translation logic.
126
+		// This token has to be placed above the `T_YIELD` token in this array to allow for this.
127
+		'T_YIELD_FROM' => array(
128
+			'5.6'         => false,
129
+			'7.0'         => true,
130
+			'description' => '"yield from" keyword (for generators)',
131
+			'content'     => 'yield',
132
+		),
133
+		'T_YIELD' => array(
134
+			'5.4'         => false,
135
+			'5.5'         => true,
136
+			'description' => '"yield" keyword (for generators)',
137
+			'content'     => 'yield',
138
+		),
139
+		'T_FINALLY' => array(
140
+			'5.4'         => false,
141
+			'5.5'         => true,
142
+			'description' => '"finally" keyword (in exception handling)',
143
+			'content'     => 'finally',
144
+		),
145
+	);
146
+
147
+	/**
148
+	 * Translation table for T_STRING tokens.
149
+	 *
150
+	 * Will be set up from the register() method.
151
+	 *
152
+	 * @var array(string => string)
153
+	 */
154
+	protected $translateContentToToken = array();
155
+
156
+
157
+	/**
158
+	 * Returns an array of tokens this test wants to listen for.
159
+	 *
160
+	 * @return array
161
+	 */
162
+	public function register()
163
+	{
164
+		$tokens    = array();
165
+		$translate = array();
166
+		foreach ($this->newKeywords as $token => $versions) {
167
+			if (\defined($token)) {
168
+				$tokens[] = constant($token);
169
+			}
170
+			if (isset($versions['content'])) {
171
+				$translate[strtolower($versions['content'])] = $token;
172
+			}
173
+		}
174
+
175
+		/*
176 176
          * Deal with tokens not recognized by the PHP version the sniffer is run
177 177
          * under and (not correctly) compensated for by PHPCS.
178 178
          */
179
-        if (empty($translate) === false) {
180
-            $this->translateContentToToken = $translate;
181
-            $tokens[]                      = \T_STRING;
182
-        }
183
-
184
-        return $tokens;
185
-    }
186
-
187
-
188
-    /**
189
-     * Processes this test, when one of its tokens is encountered.
190
-     *
191
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
192
-     * @param int                   $stackPtr  The position of the current token in
193
-     *                                         the stack passed in $tokens.
194
-     *
195
-     * @return void
196
-     */
197
-    public function process(File $phpcsFile, $stackPtr)
198
-    {
199
-        $tokens    = $phpcsFile->getTokens();
200
-        $tokenType = $tokens[$stackPtr]['type'];
201
-
202
-        // Allow for dealing with multi-token keywords, like "yield from".
203
-        $end = $stackPtr;
204
-
205
-        // Translate T_STRING token if necessary.
206
-        if ($tokens[$stackPtr]['type'] === 'T_STRING') {
207
-            $content = strtolower($tokens[$stackPtr]['content']);
208
-
209
-            if (isset($this->translateContentToToken[$content]) === false) {
210
-                // Not one of the tokens we're looking for.
211
-                return;
212
-            }
213
-
214
-            $tokenType = $this->translateContentToToken[$content];
215
-        }
216
-
217
-        /*
179
+		if (empty($translate) === false) {
180
+			$this->translateContentToToken = $translate;
181
+			$tokens[]                      = \T_STRING;
182
+		}
183
+
184
+		return $tokens;
185
+	}
186
+
187
+
188
+	/**
189
+	 * Processes this test, when one of its tokens is encountered.
190
+	 *
191
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
192
+	 * @param int                   $stackPtr  The position of the current token in
193
+	 *                                         the stack passed in $tokens.
194
+	 *
195
+	 * @return void
196
+	 */
197
+	public function process(File $phpcsFile, $stackPtr)
198
+	{
199
+		$tokens    = $phpcsFile->getTokens();
200
+		$tokenType = $tokens[$stackPtr]['type'];
201
+
202
+		// Allow for dealing with multi-token keywords, like "yield from".
203
+		$end = $stackPtr;
204
+
205
+		// Translate T_STRING token if necessary.
206
+		if ($tokens[$stackPtr]['type'] === 'T_STRING') {
207
+			$content = strtolower($tokens[$stackPtr]['content']);
208
+
209
+			if (isset($this->translateContentToToken[$content]) === false) {
210
+				// Not one of the tokens we're looking for.
211
+				return;
212
+			}
213
+
214
+			$tokenType = $this->translateContentToToken[$content];
215
+		}
216
+
217
+		/*
218 218
          * Special case: distinguish between `yield` and `yield from`.
219 219
          *
220 220
          * PHPCS currently (at least up to v 3.0.1) does not backfill for the
@@ -227,140 +227,140 @@  discard block
 block discarded – undo
227 227
          * In PHP 7.0+ both are tokenized as their respective token, however,
228 228
          * a multi-line "yield from" is tokenized as two tokens.
229 229
          */
230
-        if ($tokenType === 'T_YIELD') {
231
-            $nextToken = $phpcsFile->findNext(\T_WHITESPACE, ($end + 1), null, true);
232
-            if ($tokens[$nextToken]['code'] === \T_STRING
233
-                && $tokens[$nextToken]['content'] === 'from'
234
-            ) {
235
-                $tokenType = 'T_YIELD_FROM';
236
-                $end       = $nextToken;
237
-            }
238
-            unset($nextToken);
239
-        }
240
-
241
-        if ($tokenType === 'T_YIELD_FROM' && $tokens[($stackPtr - 1)]['type'] === 'T_YIELD_FROM') {
242
-            // Multi-line "yield from", no need to report it twice.
243
-            return;
244
-        }
245
-
246
-        if (isset($this->newKeywords[$tokenType]) === false) {
247
-            return;
248
-        }
249
-
250
-        $nextToken = $phpcsFile->findNext(Tokens::$emptyTokens, ($end + 1), null, true);
251
-        $prevToken = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
252
-
253
-        if ($prevToken !== false
254
-            && ($tokens[$prevToken]['code'] === \T_DOUBLE_COLON
255
-            || $tokens[$prevToken]['code'] === \T_OBJECT_OPERATOR)
256
-        ) {
257
-            // Class property of the same name as one of the keywords. Ignore.
258
-            return;
259
-        }
260
-
261
-        // Skip attempts to use keywords as functions or class names - the former
262
-        // will be reported by ForbiddenNamesAsInvokedFunctionsSniff, whilst the
263
-        // latter will be (partially) reported by the ForbiddenNames sniff.
264
-        // Either type will result in false-positives when targetting lower versions
265
-        // of PHP where the name was not reserved, unless we explicitly check for
266
-        // them.
267
-        if (($nextToken === false
268
-                || $tokens[$nextToken]['type'] !== 'T_OPEN_PARENTHESIS')
269
-            && ($prevToken === false
270
-                || $tokens[$prevToken]['type'] !== 'T_CLASS'
271
-                || $tokens[$prevToken]['type'] !== 'T_INTERFACE')
272
-        ) {
273
-            // Skip based on token scope condition.
274
-            if (isset($this->newKeywords[$tokenType]['condition'])
275
-                && \call_user_func(array($this, $this->newKeywords[$tokenType]['condition']), $phpcsFile, $stackPtr) === true
276
-            ) {
277
-                return;
278
-            }
279
-
280
-            $itemInfo = array(
281
-                'name'   => $tokenType,
282
-            );
283
-            $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
284
-        }
285
-    }
286
-
287
-
288
-    /**
289
-     * Get the relevant sub-array for a specific item from a multi-dimensional array.
290
-     *
291
-     * @param array $itemInfo Base information about the item.
292
-     *
293
-     * @return array Version and other information about the item.
294
-     */
295
-    public function getItemArray(array $itemInfo)
296
-    {
297
-        return $this->newKeywords[$itemInfo['name']];
298
-    }
299
-
300
-
301
-    /**
302
-     * Get an array of the non-PHP-version array keys used in a sub-array.
303
-     *
304
-     * @return array
305
-     */
306
-    protected function getNonVersionArrayKeys()
307
-    {
308
-        return array(
309
-            'description',
310
-            'condition',
311
-            'content',
312
-        );
313
-    }
314
-
315
-
316
-    /**
317
-     * Retrieve the relevant detail (version) information for use in an error message.
318
-     *
319
-     * @param array $itemArray Version and other information about the item.
320
-     * @param array $itemInfo  Base information about the item.
321
-     *
322
-     * @return array
323
-     */
324
-    public function getErrorInfo(array $itemArray, array $itemInfo)
325
-    {
326
-        $errorInfo                = parent::getErrorInfo($itemArray, $itemInfo);
327
-        $errorInfo['description'] = $itemArray['description'];
328
-
329
-        return $errorInfo;
330
-    }
331
-
332
-
333
-    /**
334
-     * Allow for concrete child classes to filter the error data before it's passed to PHPCS.
335
-     *
336
-     * @param array $data      The error data array which was created.
337
-     * @param array $itemInfo  Base information about the item this error message applies to.
338
-     * @param array $errorInfo Detail information about an item this error message applies to.
339
-     *
340
-     * @return array
341
-     */
342
-    protected function filterErrorData(array $data, array $itemInfo, array $errorInfo)
343
-    {
344
-        $data[0] = $errorInfo['description'];
345
-        return $data;
346
-    }
347
-
348
-
349
-    /**
350
-     * Callback for the quoted heredoc identifier condition.
351
-     *
352
-     * A double quoted identifier will have the opening quote on position 3
353
-     * in the string: `<<<"ID"`.
354
-     *
355
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
356
-     * @param int                   $stackPtr  The position of the current token in
357
-     *                                         the stack passed in $tokens.
358
-     *
359
-     * @return bool
360
-     */
361
-    public function isNotQuoted(File $phpcsFile, $stackPtr)
362
-    {
363
-        $tokens = $phpcsFile->getTokens();
364
-        return ($tokens[$stackPtr]['content'][3] !== '"');
365
-    }
230
+		if ($tokenType === 'T_YIELD') {
231
+			$nextToken = $phpcsFile->findNext(\T_WHITESPACE, ($end + 1), null, true);
232
+			if ($tokens[$nextToken]['code'] === \T_STRING
233
+				&& $tokens[$nextToken]['content'] === 'from'
234
+			) {
235
+				$tokenType = 'T_YIELD_FROM';
236
+				$end       = $nextToken;
237
+			}
238
+			unset($nextToken);
239
+		}
240
+
241
+		if ($tokenType === 'T_YIELD_FROM' && $tokens[($stackPtr - 1)]['type'] === 'T_YIELD_FROM') {
242
+			// Multi-line "yield from", no need to report it twice.
243
+			return;
244
+		}
245
+
246
+		if (isset($this->newKeywords[$tokenType]) === false) {
247
+			return;
248
+		}
249
+
250
+		$nextToken = $phpcsFile->findNext(Tokens::$emptyTokens, ($end + 1), null, true);
251
+		$prevToken = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
252
+
253
+		if ($prevToken !== false
254
+			&& ($tokens[$prevToken]['code'] === \T_DOUBLE_COLON
255
+			|| $tokens[$prevToken]['code'] === \T_OBJECT_OPERATOR)
256
+		) {
257
+			// Class property of the same name as one of the keywords. Ignore.
258
+			return;
259
+		}
260
+
261
+		// Skip attempts to use keywords as functions or class names - the former
262
+		// will be reported by ForbiddenNamesAsInvokedFunctionsSniff, whilst the
263
+		// latter will be (partially) reported by the ForbiddenNames sniff.
264
+		// Either type will result in false-positives when targetting lower versions
265
+		// of PHP where the name was not reserved, unless we explicitly check for
266
+		// them.
267
+		if (($nextToken === false
268
+				|| $tokens[$nextToken]['type'] !== 'T_OPEN_PARENTHESIS')
269
+			&& ($prevToken === false
270
+				|| $tokens[$prevToken]['type'] !== 'T_CLASS'
271
+				|| $tokens[$prevToken]['type'] !== 'T_INTERFACE')
272
+		) {
273
+			// Skip based on token scope condition.
274
+			if (isset($this->newKeywords[$tokenType]['condition'])
275
+				&& \call_user_func(array($this, $this->newKeywords[$tokenType]['condition']), $phpcsFile, $stackPtr) === true
276
+			) {
277
+				return;
278
+			}
279
+
280
+			$itemInfo = array(
281
+				'name'   => $tokenType,
282
+			);
283
+			$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
284
+		}
285
+	}
286
+
287
+
288
+	/**
289
+	 * Get the relevant sub-array for a specific item from a multi-dimensional array.
290
+	 *
291
+	 * @param array $itemInfo Base information about the item.
292
+	 *
293
+	 * @return array Version and other information about the item.
294
+	 */
295
+	public function getItemArray(array $itemInfo)
296
+	{
297
+		return $this->newKeywords[$itemInfo['name']];
298
+	}
299
+
300
+
301
+	/**
302
+	 * Get an array of the non-PHP-version array keys used in a sub-array.
303
+	 *
304
+	 * @return array
305
+	 */
306
+	protected function getNonVersionArrayKeys()
307
+	{
308
+		return array(
309
+			'description',
310
+			'condition',
311
+			'content',
312
+		);
313
+	}
314
+
315
+
316
+	/**
317
+	 * Retrieve the relevant detail (version) information for use in an error message.
318
+	 *
319
+	 * @param array $itemArray Version and other information about the item.
320
+	 * @param array $itemInfo  Base information about the item.
321
+	 *
322
+	 * @return array
323
+	 */
324
+	public function getErrorInfo(array $itemArray, array $itemInfo)
325
+	{
326
+		$errorInfo                = parent::getErrorInfo($itemArray, $itemInfo);
327
+		$errorInfo['description'] = $itemArray['description'];
328
+
329
+		return $errorInfo;
330
+	}
331
+
332
+
333
+	/**
334
+	 * Allow for concrete child classes to filter the error data before it's passed to PHPCS.
335
+	 *
336
+	 * @param array $data      The error data array which was created.
337
+	 * @param array $itemInfo  Base information about the item this error message applies to.
338
+	 * @param array $errorInfo Detail information about an item this error message applies to.
339
+	 *
340
+	 * @return array
341
+	 */
342
+	protected function filterErrorData(array $data, array $itemInfo, array $errorInfo)
343
+	{
344
+		$data[0] = $errorInfo['description'];
345
+		return $data;
346
+	}
347
+
348
+
349
+	/**
350
+	 * Callback for the quoted heredoc identifier condition.
351
+	 *
352
+	 * A double quoted identifier will have the opening quote on position 3
353
+	 * in the string: `<<<"ID"`.
354
+	 *
355
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
356
+	 * @param int                   $stackPtr  The position of the current token in
357
+	 *                                         the stack passed in $tokens.
358
+	 *
359
+	 * @return bool
360
+	 */
361
+	public function isNotQuoted(File $phpcsFile, $stackPtr)
362
+	{
363
+		$tokens = $phpcsFile->getTokens();
364
+		return ($tokens[$stackPtr]['content'][3] !== '"');
365
+	}
366 366
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Keywords/ForbiddenNamesAsInvokedFunctionsSniff.php 1 patch
Indentation   +140 added lines, -140 removed lines patch added patch discarded remove patch
@@ -27,155 +27,155 @@
 block discarded – undo
27 27
 class ForbiddenNamesAsInvokedFunctionsSniff extends Sniff
28 28
 {
29 29
 
30
-    /**
31
-     * List of tokens to register.
32
-     *
33
-     * @var array
34
-     */
35
-    protected $targetedTokens = array(
36
-        \T_ABSTRACT   => '5.0',
37
-        \T_CALLABLE   => '5.4',
38
-        \T_CATCH      => '5.0',
39
-        \T_FINAL      => '5.0',
40
-        \T_FINALLY    => '5.5',
41
-        \T_GOTO       => '5.3',
42
-        \T_IMPLEMENTS => '5.0',
43
-        \T_INTERFACE  => '5.0',
44
-        \T_INSTANCEOF => '5.0',
45
-        \T_INSTEADOF  => '5.4',
46
-        \T_NAMESPACE  => '5.3',
47
-        \T_PRIVATE    => '5.0',
48
-        \T_PROTECTED  => '5.0',
49
-        \T_PUBLIC     => '5.0',
50
-        \T_TRAIT      => '5.4',
51
-        \T_TRY        => '5.0',
52
-
53
-    );
54
-
55
-    /**
56
-     * T_STRING keywords to recognize as targetted tokens.
57
-     *
58
-     * Compatibility for PHP versions where the keyword is not yet recognized
59
-     * as its own token and for PHPCS versions which change the token to
60
-     * T_STRING when used in a method call.
61
-     *
62
-     * @var array
63
-     */
64
-    protected $targetedStringTokens = array(
65
-        'abstract'   => '5.0',
66
-        'callable'   => '5.4',
67
-        'catch'      => '5.0',
68
-        'final'      => '5.0',
69
-        'finally'    => '5.5',
70
-        'goto'       => '5.3',
71
-        'implements' => '5.0',
72
-        'interface'  => '5.0',
73
-        'instanceof' => '5.0',
74
-        'insteadof'  => '5.4',
75
-        'namespace'  => '5.3',
76
-        'private'    => '5.0',
77
-        'protected'  => '5.0',
78
-        'public'     => '5.0',
79
-        'trait'      => '5.4',
80
-        'try'        => '5.0',
81
-    );
82
-
83
-    /**
84
-     * Returns an array of tokens this test wants to listen for.
85
-     *
86
-     * @return array
87
-     */
88
-    public function register()
89
-    {
90
-        $tokens   = array_keys($this->targetedTokens);
91
-        $tokens[] = \T_STRING;
92
-
93
-        return $tokens;
94
-    }
95
-
96
-    /**
97
-     * Processes this test, when one of its tokens is encountered.
98
-     *
99
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
100
-     * @param int                   $stackPtr  The position of the current token in the
101
-     *                                         stack passed in $tokens.
102
-     *
103
-     * @return void
104
-     */
105
-    public function process(File $phpcsFile, $stackPtr)
106
-    {
107
-        $tokens         = $phpcsFile->getTokens();
108
-        $tokenCode      = $tokens[$stackPtr]['code'];
109
-        $tokenContentLc = strtolower($tokens[$stackPtr]['content']);
110
-        $isString       = false;
111
-
112
-        /*
30
+	/**
31
+	 * List of tokens to register.
32
+	 *
33
+	 * @var array
34
+	 */
35
+	protected $targetedTokens = array(
36
+		\T_ABSTRACT   => '5.0',
37
+		\T_CALLABLE   => '5.4',
38
+		\T_CATCH      => '5.0',
39
+		\T_FINAL      => '5.0',
40
+		\T_FINALLY    => '5.5',
41
+		\T_GOTO       => '5.3',
42
+		\T_IMPLEMENTS => '5.0',
43
+		\T_INTERFACE  => '5.0',
44
+		\T_INSTANCEOF => '5.0',
45
+		\T_INSTEADOF  => '5.4',
46
+		\T_NAMESPACE  => '5.3',
47
+		\T_PRIVATE    => '5.0',
48
+		\T_PROTECTED  => '5.0',
49
+		\T_PUBLIC     => '5.0',
50
+		\T_TRAIT      => '5.4',
51
+		\T_TRY        => '5.0',
52
+
53
+	);
54
+
55
+	/**
56
+	 * T_STRING keywords to recognize as targetted tokens.
57
+	 *
58
+	 * Compatibility for PHP versions where the keyword is not yet recognized
59
+	 * as its own token and for PHPCS versions which change the token to
60
+	 * T_STRING when used in a method call.
61
+	 *
62
+	 * @var array
63
+	 */
64
+	protected $targetedStringTokens = array(
65
+		'abstract'   => '5.0',
66
+		'callable'   => '5.4',
67
+		'catch'      => '5.0',
68
+		'final'      => '5.0',
69
+		'finally'    => '5.5',
70
+		'goto'       => '5.3',
71
+		'implements' => '5.0',
72
+		'interface'  => '5.0',
73
+		'instanceof' => '5.0',
74
+		'insteadof'  => '5.4',
75
+		'namespace'  => '5.3',
76
+		'private'    => '5.0',
77
+		'protected'  => '5.0',
78
+		'public'     => '5.0',
79
+		'trait'      => '5.4',
80
+		'try'        => '5.0',
81
+	);
82
+
83
+	/**
84
+	 * Returns an array of tokens this test wants to listen for.
85
+	 *
86
+	 * @return array
87
+	 */
88
+	public function register()
89
+	{
90
+		$tokens   = array_keys($this->targetedTokens);
91
+		$tokens[] = \T_STRING;
92
+
93
+		return $tokens;
94
+	}
95
+
96
+	/**
97
+	 * Processes this test, when one of its tokens is encountered.
98
+	 *
99
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
100
+	 * @param int                   $stackPtr  The position of the current token in the
101
+	 *                                         stack passed in $tokens.
102
+	 *
103
+	 * @return void
104
+	 */
105
+	public function process(File $phpcsFile, $stackPtr)
106
+	{
107
+		$tokens         = $phpcsFile->getTokens();
108
+		$tokenCode      = $tokens[$stackPtr]['code'];
109
+		$tokenContentLc = strtolower($tokens[$stackPtr]['content']);
110
+		$isString       = false;
111
+
112
+		/*
113 113
          * For string tokens we only care if the string is a reserved word used
114 114
          * as a function. This only happens in older versions of PHP where the
115 115
          * token doesn't exist yet for that keyword or in later versions when the
116 116
          * token is used in a method invocation.
117 117
          */
118
-        if ($tokenCode === \T_STRING
119
-            && (isset($this->targetedStringTokens[$tokenContentLc]) === false)
120
-        ) {
121
-            return;
122
-        }
123
-
124
-        if ($tokenCode === \T_STRING) {
125
-            $isString = true;
126
-        }
127
-
128
-        // Make sure this is a function call.
129
-        $next = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
130
-        if ($next === false || $tokens[$next]['code'] !== \T_OPEN_PARENTHESIS) {
131
-            // Not a function call.
132
-            return;
133
-        }
134
-
135
-        // This sniff isn't concerned about function declarations.
136
-        $prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
137
-        if ($prev !== false && $tokens[$prev]['code'] === \T_FUNCTION) {
138
-            return;
139
-        }
140
-
141
-        /*
118
+		if ($tokenCode === \T_STRING
119
+			&& (isset($this->targetedStringTokens[$tokenContentLc]) === false)
120
+		) {
121
+			return;
122
+		}
123
+
124
+		if ($tokenCode === \T_STRING) {
125
+			$isString = true;
126
+		}
127
+
128
+		// Make sure this is a function call.
129
+		$next = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
130
+		if ($next === false || $tokens[$next]['code'] !== \T_OPEN_PARENTHESIS) {
131
+			// Not a function call.
132
+			return;
133
+		}
134
+
135
+		// This sniff isn't concerned about function declarations.
136
+		$prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
137
+		if ($prev !== false && $tokens[$prev]['code'] === \T_FUNCTION) {
138
+			return;
139
+		}
140
+
141
+		/*
142 142
          * Deal with PHP 7 relaxing the rules.
143 143
          * "As of PHP 7.0.0 these keywords are allowed as property, constant, and method names
144 144
          * of classes, interfaces and traits...", i.e. they can be invoked as a method call.
145 145
          *
146 146
          * Only needed for those keywords which we sniff out via T_STRING.
147 147
          */
148
-        if (($tokens[$prev]['code'] === \T_OBJECT_OPERATOR || $tokens[$prev]['code'] === \T_DOUBLE_COLON)
149
-            && $this->supportsBelow('5.6') === false
150
-        ) {
151
-            return;
152
-        }
153
-
154
-        // For the word catch, it is valid to have an open parenthesis
155
-        // after it, but only if it is preceded by a right curly brace.
156
-        if ($tokenCode === \T_CATCH) {
157
-            if ($prev !== false && $tokens[$prev]['code'] === \T_CLOSE_CURLY_BRACKET) {
158
-                // Ok, it's fine.
159
-                return;
160
-            }
161
-        }
162
-
163
-        if ($isString === true) {
164
-            $version = $this->targetedStringTokens[$tokenContentLc];
165
-        } else {
166
-            $version = $this->targetedTokens[$tokenCode];
167
-        }
168
-
169
-        if ($this->supportsAbove($version)) {
170
-            $error     = "'%s' is a reserved keyword introduced in PHP version %s and cannot be invoked as a function (%s)";
171
-            $errorCode = $this->stringToErrorCode($tokenContentLc) . 'Found';
172
-            $data      = array(
173
-                $tokenContentLc,
174
-                $version,
175
-                $tokens[$stackPtr]['type'],
176
-            );
177
-
178
-            $phpcsFile->addError($error, $stackPtr, $errorCode, $data);
179
-        }
180
-    }
148
+		if (($tokens[$prev]['code'] === \T_OBJECT_OPERATOR || $tokens[$prev]['code'] === \T_DOUBLE_COLON)
149
+			&& $this->supportsBelow('5.6') === false
150
+		) {
151
+			return;
152
+		}
153
+
154
+		// For the word catch, it is valid to have an open parenthesis
155
+		// after it, but only if it is preceded by a right curly brace.
156
+		if ($tokenCode === \T_CATCH) {
157
+			if ($prev !== false && $tokens[$prev]['code'] === \T_CLOSE_CURLY_BRACKET) {
158
+				// Ok, it's fine.
159
+				return;
160
+			}
161
+		}
162
+
163
+		if ($isString === true) {
164
+			$version = $this->targetedStringTokens[$tokenContentLc];
165
+		} else {
166
+			$version = $this->targetedTokens[$tokenCode];
167
+		}
168
+
169
+		if ($this->supportsAbove($version)) {
170
+			$error     = "'%s' is a reserved keyword introduced in PHP version %s and cannot be invoked as a function (%s)";
171
+			$errorCode = $this->stringToErrorCode($tokenContentLc) . 'Found';
172
+			$data      = array(
173
+				$tokenContentLc,
174
+				$version,
175
+				$tokens[$stackPtr]['type'],
176
+			);
177
+
178
+			$phpcsFile->addError($error, $stackPtr, $errorCode, $data);
179
+		}
180
+	}
181 181
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Keywords/ForbiddenNamesAsDeclaredSniff.php 1 patch
Indentation   +213 added lines, -213 removed lines patch added patch discarded remove patch
@@ -32,217 +32,217 @@
 block discarded – undo
32 32
 class ForbiddenNamesAsDeclaredSniff extends Sniff
33 33
 {
34 34
 
35
-    /**
36
-     * List of tokens which can not be used as class, interface, trait names or as part of a namespace.
37
-     *
38
-     * @var array
39
-     */
40
-    protected $forbiddenTokens = array(
41
-        \T_NULL  => '7.0',
42
-        \T_TRUE  => '7.0',
43
-        \T_FALSE => '7.0',
44
-    );
45
-
46
-    /**
47
-     * T_STRING keywords to recognize as forbidden names.
48
-     *
49
-     * @var array
50
-     */
51
-    protected $forbiddenNames = array(
52
-        'null'     => '7.0',
53
-        'true'     => '7.0',
54
-        'false'    => '7.0',
55
-        'bool'     => '7.0',
56
-        'int'      => '7.0',
57
-        'float'    => '7.0',
58
-        'string'   => '7.0',
59
-        'iterable' => '7.1',
60
-        'void'     => '7.1',
61
-        'object'   => '7.2',
62
-    );
63
-
64
-    /**
65
-     * T_STRING keywords to recognize as soft reserved names.
66
-     *
67
-     * Using any of these keywords to name a class, interface, trait or namespace
68
-     * is highly discouraged since they may be used in future versions of PHP.
69
-     *
70
-     * @var array
71
-     */
72
-    protected $softReservedNames = array(
73
-        'resource' => '7.0',
74
-        'object'   => '7.0',
75
-        'mixed'    => '7.0',
76
-        'numeric'  => '7.0',
77
-    );
78
-
79
-    /**
80
-     * Combined list of the two lists above.
81
-     *
82
-     * Used for quick check whether or not something is a reserved
83
-     * word.
84
-     * Set from the `register()` method.
85
-     *
86
-     * @var array
87
-     */
88
-    private $allForbiddenNames = array();
89
-
90
-
91
-    /**
92
-     * Returns an array of tokens this test wants to listen for.
93
-     *
94
-     * @return array
95
-     */
96
-    public function register()
97
-    {
98
-        // Do the list merge only once.
99
-        $this->allForbiddenNames = array_merge($this->forbiddenNames, $this->softReservedNames);
100
-
101
-        $targets = array(
102
-            \T_CLASS,
103
-            \T_INTERFACE,
104
-            \T_TRAIT,
105
-            \T_NAMESPACE,
106
-            \T_STRING, // Compat for PHPCS < 2.4.0 and PHP < 5.3.
107
-        );
108
-
109
-        return $targets;
110
-    }
111
-
112
-
113
-    /**
114
-     * Processes this test, when one of its tokens is encountered.
115
-     *
116
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
117
-     * @param int                   $stackPtr  The position of the current token in the
118
-     *                                         stack passed in $tokens.
119
-     *
120
-     * @return void
121
-     */
122
-    public function process(File $phpcsFile, $stackPtr)
123
-    {
124
-        if ($this->supportsAbove('7.0') === false) {
125
-            return;
126
-        }
127
-
128
-        $tokens         = $phpcsFile->getTokens();
129
-        $tokenCode      = $tokens[$stackPtr]['code'];
130
-        $tokenType      = $tokens[$stackPtr]['type'];
131
-        $tokenContentLc = strtolower($tokens[$stackPtr]['content']);
132
-
133
-        // For string tokens we only care about 'trait' as that is the only one
134
-        // which may not be correctly recognized as it's own token.
135
-        // This only happens in older versions of PHP where the token doesn't exist yet as a keyword.
136
-        if ($tokenCode === \T_STRING && $tokenContentLc !== 'trait') {
137
-            return;
138
-        }
139
-
140
-        if (\in_array($tokenType, array('T_CLASS', 'T_INTERFACE', 'T_TRAIT'), true)) {
141
-            // Check for the declared name being a name which is not tokenized as T_STRING.
142
-            $nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
143
-            if ($nextNonEmpty !== false && isset($this->forbiddenTokens[$tokens[$nextNonEmpty]['code']]) === true) {
144
-                $name = $tokens[$nextNonEmpty]['content'];
145
-            } else {
146
-                // Get the declared name if it's a T_STRING.
147
-                $name = $phpcsFile->getDeclarationName($stackPtr);
148
-            }
149
-            unset($nextNonEmpty);
150
-
151
-            if (isset($name) === false || \is_string($name) === false || $name === '') {
152
-                return;
153
-            }
154
-
155
-            $nameLc = strtolower($name);
156
-            if (isset($this->allForbiddenNames[$nameLc]) === false) {
157
-                return;
158
-            }
159
-
160
-        } elseif ($tokenCode === \T_NAMESPACE) {
161
-            $namespaceName = $this->getDeclaredNamespaceName($phpcsFile, $stackPtr);
162
-
163
-            if ($namespaceName === false || $namespaceName === '') {
164
-                return;
165
-            }
166
-
167
-            $namespaceParts = explode('\\', $namespaceName);
168
-            foreach ($namespaceParts as $namespacePart) {
169
-                $partLc = strtolower($namespacePart);
170
-                if (isset($this->allForbiddenNames[$partLc]) === true) {
171
-                    $name   = $namespacePart;
172
-                    $nameLc = $partLc;
173
-                    break;
174
-                }
175
-            }
176
-        } elseif ($tokenCode === \T_STRING) {
177
-            // Traits which are not yet tokenized as T_TRAIT.
178
-            $nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
179
-            if ($nextNonEmpty === false) {
180
-                return;
181
-            }
182
-
183
-            $nextNonEmptyCode = $tokens[$nextNonEmpty]['code'];
184
-
185
-            if ($nextNonEmptyCode !== \T_STRING && isset($this->forbiddenTokens[$nextNonEmptyCode]) === true) {
186
-                $name   = $tokens[$nextNonEmpty]['content'];
187
-                $nameLc = strtolower($tokens[$nextNonEmpty]['content']);
188
-            } elseif ($nextNonEmptyCode === \T_STRING) {
189
-                $endOfStatement = $phpcsFile->findNext(array(\T_SEMICOLON, \T_OPEN_CURLY_BRACKET), ($stackPtr + 1));
190
-                if ($endOfStatement === false) {
191
-                    return;
192
-                }
193
-
194
-                do {
195
-                    $nextNonEmptyLc = strtolower($tokens[$nextNonEmpty]['content']);
196
-
197
-                    if (isset($this->allForbiddenNames[$nextNonEmptyLc]) === true) {
198
-                        $name   = $tokens[$nextNonEmpty]['content'];
199
-                        $nameLc = $nextNonEmptyLc;
200
-                        break;
201
-                    }
202
-
203
-                    $nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), $endOfStatement, true);
204
-                } while ($nextNonEmpty !== false);
205
-            }
206
-            unset($nextNonEmptyCode, $nextNonEmptyLc, $endOfStatement);
207
-        }
208
-
209
-        if (isset($name, $nameLc) === false) {
210
-            return;
211
-        }
212
-
213
-        // Still here, so this is one of the reserved words.
214
-        // Build up the error message.
215
-        $error     = "'%s' is a";
216
-        $isError   = null;
217
-        $errorCode = $this->stringToErrorCode($nameLc) . 'Found';
218
-        $data      = array(
219
-            $nameLc,
220
-        );
221
-
222
-        if (isset($this->softReservedNames[$nameLc]) === true
223
-            && $this->supportsAbove($this->softReservedNames[$nameLc]) === true
224
-        ) {
225
-            $error  .= ' soft reserved keyword as of PHP version %s';
226
-            $isError = false;
227
-            $data[]  = $this->softReservedNames[$nameLc];
228
-        }
229
-
230
-        if (isset($this->forbiddenNames[$nameLc]) === true
231
-            && $this->supportsAbove($this->forbiddenNames[$nameLc]) === true
232
-        ) {
233
-            if (isset($isError) === true) {
234
-                $error .= ' and a';
235
-            }
236
-            $error  .= ' reserved keyword as of PHP version %s';
237
-            $isError = true;
238
-            $data[]  = $this->forbiddenNames[$nameLc];
239
-        }
240
-
241
-        if (isset($isError) === true) {
242
-            $error .= ' and should not be used to name a class, interface or trait or as part of a namespace (%s)';
243
-            $data[] = $tokens[$stackPtr]['type'];
244
-
245
-            $this->addMessage($phpcsFile, $error, $stackPtr, $isError, $errorCode, $data);
246
-        }
247
-    }
35
+	/**
36
+	 * List of tokens which can not be used as class, interface, trait names or as part of a namespace.
37
+	 *
38
+	 * @var array
39
+	 */
40
+	protected $forbiddenTokens = array(
41
+		\T_NULL  => '7.0',
42
+		\T_TRUE  => '7.0',
43
+		\T_FALSE => '7.0',
44
+	);
45
+
46
+	/**
47
+	 * T_STRING keywords to recognize as forbidden names.
48
+	 *
49
+	 * @var array
50
+	 */
51
+	protected $forbiddenNames = array(
52
+		'null'     => '7.0',
53
+		'true'     => '7.0',
54
+		'false'    => '7.0',
55
+		'bool'     => '7.0',
56
+		'int'      => '7.0',
57
+		'float'    => '7.0',
58
+		'string'   => '7.0',
59
+		'iterable' => '7.1',
60
+		'void'     => '7.1',
61
+		'object'   => '7.2',
62
+	);
63
+
64
+	/**
65
+	 * T_STRING keywords to recognize as soft reserved names.
66
+	 *
67
+	 * Using any of these keywords to name a class, interface, trait or namespace
68
+	 * is highly discouraged since they may be used in future versions of PHP.
69
+	 *
70
+	 * @var array
71
+	 */
72
+	protected $softReservedNames = array(
73
+		'resource' => '7.0',
74
+		'object'   => '7.0',
75
+		'mixed'    => '7.0',
76
+		'numeric'  => '7.0',
77
+	);
78
+
79
+	/**
80
+	 * Combined list of the two lists above.
81
+	 *
82
+	 * Used for quick check whether or not something is a reserved
83
+	 * word.
84
+	 * Set from the `register()` method.
85
+	 *
86
+	 * @var array
87
+	 */
88
+	private $allForbiddenNames = array();
89
+
90
+
91
+	/**
92
+	 * Returns an array of tokens this test wants to listen for.
93
+	 *
94
+	 * @return array
95
+	 */
96
+	public function register()
97
+	{
98
+		// Do the list merge only once.
99
+		$this->allForbiddenNames = array_merge($this->forbiddenNames, $this->softReservedNames);
100
+
101
+		$targets = array(
102
+			\T_CLASS,
103
+			\T_INTERFACE,
104
+			\T_TRAIT,
105
+			\T_NAMESPACE,
106
+			\T_STRING, // Compat for PHPCS < 2.4.0 and PHP < 5.3.
107
+		);
108
+
109
+		return $targets;
110
+	}
111
+
112
+
113
+	/**
114
+	 * Processes this test, when one of its tokens is encountered.
115
+	 *
116
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
117
+	 * @param int                   $stackPtr  The position of the current token in the
118
+	 *                                         stack passed in $tokens.
119
+	 *
120
+	 * @return void
121
+	 */
122
+	public function process(File $phpcsFile, $stackPtr)
123
+	{
124
+		if ($this->supportsAbove('7.0') === false) {
125
+			return;
126
+		}
127
+
128
+		$tokens         = $phpcsFile->getTokens();
129
+		$tokenCode      = $tokens[$stackPtr]['code'];
130
+		$tokenType      = $tokens[$stackPtr]['type'];
131
+		$tokenContentLc = strtolower($tokens[$stackPtr]['content']);
132
+
133
+		// For string tokens we only care about 'trait' as that is the only one
134
+		// which may not be correctly recognized as it's own token.
135
+		// This only happens in older versions of PHP where the token doesn't exist yet as a keyword.
136
+		if ($tokenCode === \T_STRING && $tokenContentLc !== 'trait') {
137
+			return;
138
+		}
139
+
140
+		if (\in_array($tokenType, array('T_CLASS', 'T_INTERFACE', 'T_TRAIT'), true)) {
141
+			// Check for the declared name being a name which is not tokenized as T_STRING.
142
+			$nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
143
+			if ($nextNonEmpty !== false && isset($this->forbiddenTokens[$tokens[$nextNonEmpty]['code']]) === true) {
144
+				$name = $tokens[$nextNonEmpty]['content'];
145
+			} else {
146
+				// Get the declared name if it's a T_STRING.
147
+				$name = $phpcsFile->getDeclarationName($stackPtr);
148
+			}
149
+			unset($nextNonEmpty);
150
+
151
+			if (isset($name) === false || \is_string($name) === false || $name === '') {
152
+				return;
153
+			}
154
+
155
+			$nameLc = strtolower($name);
156
+			if (isset($this->allForbiddenNames[$nameLc]) === false) {
157
+				return;
158
+			}
159
+
160
+		} elseif ($tokenCode === \T_NAMESPACE) {
161
+			$namespaceName = $this->getDeclaredNamespaceName($phpcsFile, $stackPtr);
162
+
163
+			if ($namespaceName === false || $namespaceName === '') {
164
+				return;
165
+			}
166
+
167
+			$namespaceParts = explode('\\', $namespaceName);
168
+			foreach ($namespaceParts as $namespacePart) {
169
+				$partLc = strtolower($namespacePart);
170
+				if (isset($this->allForbiddenNames[$partLc]) === true) {
171
+					$name   = $namespacePart;
172
+					$nameLc = $partLc;
173
+					break;
174
+				}
175
+			}
176
+		} elseif ($tokenCode === \T_STRING) {
177
+			// Traits which are not yet tokenized as T_TRAIT.
178
+			$nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
179
+			if ($nextNonEmpty === false) {
180
+				return;
181
+			}
182
+
183
+			$nextNonEmptyCode = $tokens[$nextNonEmpty]['code'];
184
+
185
+			if ($nextNonEmptyCode !== \T_STRING && isset($this->forbiddenTokens[$nextNonEmptyCode]) === true) {
186
+				$name   = $tokens[$nextNonEmpty]['content'];
187
+				$nameLc = strtolower($tokens[$nextNonEmpty]['content']);
188
+			} elseif ($nextNonEmptyCode === \T_STRING) {
189
+				$endOfStatement = $phpcsFile->findNext(array(\T_SEMICOLON, \T_OPEN_CURLY_BRACKET), ($stackPtr + 1));
190
+				if ($endOfStatement === false) {
191
+					return;
192
+				}
193
+
194
+				do {
195
+					$nextNonEmptyLc = strtolower($tokens[$nextNonEmpty]['content']);
196
+
197
+					if (isset($this->allForbiddenNames[$nextNonEmptyLc]) === true) {
198
+						$name   = $tokens[$nextNonEmpty]['content'];
199
+						$nameLc = $nextNonEmptyLc;
200
+						break;
201
+					}
202
+
203
+					$nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), $endOfStatement, true);
204
+				} while ($nextNonEmpty !== false);
205
+			}
206
+			unset($nextNonEmptyCode, $nextNonEmptyLc, $endOfStatement);
207
+		}
208
+
209
+		if (isset($name, $nameLc) === false) {
210
+			return;
211
+		}
212
+
213
+		// Still here, so this is one of the reserved words.
214
+		// Build up the error message.
215
+		$error     = "'%s' is a";
216
+		$isError   = null;
217
+		$errorCode = $this->stringToErrorCode($nameLc) . 'Found';
218
+		$data      = array(
219
+			$nameLc,
220
+		);
221
+
222
+		if (isset($this->softReservedNames[$nameLc]) === true
223
+			&& $this->supportsAbove($this->softReservedNames[$nameLc]) === true
224
+		) {
225
+			$error  .= ' soft reserved keyword as of PHP version %s';
226
+			$isError = false;
227
+			$data[]  = $this->softReservedNames[$nameLc];
228
+		}
229
+
230
+		if (isset($this->forbiddenNames[$nameLc]) === true
231
+			&& $this->supportsAbove($this->forbiddenNames[$nameLc]) === true
232
+		) {
233
+			if (isset($isError) === true) {
234
+				$error .= ' and a';
235
+			}
236
+			$error  .= ' reserved keyword as of PHP version %s';
237
+			$isError = true;
238
+			$data[]  = $this->forbiddenNames[$nameLc];
239
+		}
240
+
241
+		if (isset($isError) === true) {
242
+			$error .= ' and should not be used to name a class, interface or trait or as part of a namespace (%s)';
243
+			$data[] = $tokens[$stackPtr]['type'];
244
+
245
+			$this->addMessage($phpcsFile, $error, $stackPtr, $isError, $errorCode, $data);
246
+		}
247
+	}
248 248
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Keywords/CaseSensitiveKeywordsSniff.php 1 patch
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -29,45 +29,45 @@
 block discarded – undo
29 29
 class CaseSensitiveKeywordsSniff extends Sniff
30 30
 {
31 31
 
32
-    /**
33
-     * Returns an array of tokens this test wants to listen for.
34
-     *
35
-     * @return array
36
-     */
37
-    public function register()
38
-    {
39
-        return array(
40
-            \T_SELF,
41
-            \T_STATIC,
42
-            \T_PARENT,
43
-        );
44
-    }
32
+	/**
33
+	 * Returns an array of tokens this test wants to listen for.
34
+	 *
35
+	 * @return array
36
+	 */
37
+	public function register()
38
+	{
39
+		return array(
40
+			\T_SELF,
41
+			\T_STATIC,
42
+			\T_PARENT,
43
+		);
44
+	}
45 45
 
46
-    /**
47
-     * Processes this test, when one of its tokens is encountered.
48
-     *
49
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
50
-     * @param int                   $stackPtr  The position of the current token in the
51
-     *                                         stack passed in $tokens.
52
-     *
53
-     * @return void
54
-     */
55
-    public function process(File $phpcsFile, $stackPtr)
56
-    {
57
-        if ($this->supportsBelow('5.4') === false) {
58
-            return;
59
-        }
46
+	/**
47
+	 * Processes this test, when one of its tokens is encountered.
48
+	 *
49
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
50
+	 * @param int                   $stackPtr  The position of the current token in the
51
+	 *                                         stack passed in $tokens.
52
+	 *
53
+	 * @return void
54
+	 */
55
+	public function process(File $phpcsFile, $stackPtr)
56
+	{
57
+		if ($this->supportsBelow('5.4') === false) {
58
+			return;
59
+		}
60 60
 
61
-        $tokens         = $phpcsFile->getTokens();
62
-        $tokenContentLC = strtolower($tokens[$stackPtr]['content']);
61
+		$tokens         = $phpcsFile->getTokens();
62
+		$tokenContentLC = strtolower($tokens[$stackPtr]['content']);
63 63
 
64
-        if ($tokenContentLC !== $tokens[$stackPtr]['content']) {
65
-            $phpcsFile->addError(
66
-                'The keyword \'%s\' was treated in a case-sensitive fashion in certain cases in PHP 5.4 or earlier. Use the lowercase version for consistent support.',
67
-                $stackPtr,
68
-                'NonLowercaseFound',
69
-                array($tokenContentLC)
70
-            );
71
-        }
72
-    }
64
+		if ($tokenContentLC !== $tokens[$stackPtr]['content']) {
65
+			$phpcsFile->addError(
66
+				'The keyword \'%s\' was treated in a case-sensitive fashion in certain cases in PHP 5.4 or earlier. Use the lowercase version for consistent support.',
67
+				$stackPtr,
68
+				'NonLowercaseFound',
69
+				array($tokenContentLC)
70
+			);
71
+		}
72
+	}
73 73
 }
Please login to merge, or discard this patch.
php-compatibility/PHPCompatibility/Sniffs/Keywords/ForbiddenNamesSniff.php 1 patch
Indentation   +335 added lines, -335 removed lines patch added patch discarded remove patch
@@ -27,365 +27,365 @@
 block discarded – undo
27 27
 class ForbiddenNamesSniff extends Sniff
28 28
 {
29 29
 
30
-    /**
31
-     * A list of keywords that can not be used as function, class and namespace name or constant name.
32
-     * Mentions since which version it's not allowed.
33
-     *
34
-     * @var array(string => string)
35
-     */
36
-    protected $invalidNames = array(
37
-        'abstract'      => '5.0',
38
-        'and'           => 'all',
39
-        'array'         => 'all',
40
-        'as'            => 'all',
41
-        'break'         => 'all',
42
-        'callable'      => '5.4',
43
-        'case'          => 'all',
44
-        'catch'         => '5.0',
45
-        'class'         => 'all',
46
-        'clone'         => '5.0',
47
-        'const'         => 'all',
48
-        'continue'      => 'all',
49
-        'declare'       => 'all',
50
-        'default'       => 'all',
51
-        'do'            => 'all',
52
-        'else'          => 'all',
53
-        'elseif'        => 'all',
54
-        'enddeclare'    => 'all',
55
-        'endfor'        => 'all',
56
-        'endforeach'    => 'all',
57
-        'endif'         => 'all',
58
-        'endswitch'     => 'all',
59
-        'endwhile'      => 'all',
60
-        'extends'       => 'all',
61
-        'final'         => '5.0',
62
-        'finally'       => '5.5',
63
-        'for'           => 'all',
64
-        'foreach'       => 'all',
65
-        'function'      => 'all',
66
-        'global'        => 'all',
67
-        'goto'          => '5.3',
68
-        'if'            => 'all',
69
-        'implements'    => '5.0',
70
-        'interface'     => '5.0',
71
-        'instanceof'    => '5.0',
72
-        'insteadof'     => '5.4',
73
-        'namespace'     => '5.3',
74
-        'new'           => 'all',
75
-        'or'            => 'all',
76
-        'private'       => '5.0',
77
-        'protected'     => '5.0',
78
-        'public'        => '5.0',
79
-        'static'        => 'all',
80
-        'switch'        => 'all',
81
-        'throw'         => '5.0',
82
-        'trait'         => '5.4',
83
-        'try'           => '5.0',
84
-        'use'           => 'all',
85
-        'var'           => 'all',
86
-        'while'         => 'all',
87
-        'xor'           => 'all',
88
-        '__class__'     => 'all',
89
-        '__dir__'       => '5.3',
90
-        '__file__'      => 'all',
91
-        '__function__'  => 'all',
92
-        '__method__'    => 'all',
93
-        '__namespace__' => '5.3',
94
-    );
95
-
96
-    /**
97
-     * A list of keywords that can follow use statements.
98
-     *
99
-     * @var array(string => string)
100
-     */
101
-    protected $validUseNames = array(
102
-        'const'    => true,
103
-        'function' => true,
104
-    );
105
-
106
-    /**
107
-     * Scope modifiers and other keywords allowed in trait use statements.
108
-     *
109
-     * @var array
110
-     */
111
-    private $allowedModifiers = array();
112
-
113
-    /**
114
-     * Targeted tokens.
115
-     *
116
-     * @var array
117
-     */
118
-    protected $targetedTokens = array(
119
-        \T_CLASS,
120
-        \T_FUNCTION,
121
-        \T_NAMESPACE,
122
-        \T_STRING,
123
-        \T_CONST,
124
-        \T_USE,
125
-        \T_AS,
126
-        \T_EXTENDS,
127
-        \T_INTERFACE,
128
-        \T_TRAIT,
129
-    );
130
-
131
-    /**
132
-     * Returns an array of tokens this test wants to listen for.
133
-     *
134
-     * @return array
135
-     */
136
-    public function register()
137
-    {
138
-        $this->allowedModifiers           = Tokens::$scopeModifiers;
139
-        $this->allowedModifiers[\T_FINAL] = \T_FINAL;
140
-
141
-        $tokens = $this->targetedTokens;
142
-
143
-        if (\defined('T_ANON_CLASS')) {
144
-            $tokens[] = \T_ANON_CLASS;
145
-        }
146
-
147
-        return $tokens;
148
-    }
149
-
150
-    /**
151
-     * Processes this test, when one of its tokens is encountered.
152
-     *
153
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
154
-     * @param int                   $stackPtr  The position of the current token in the
155
-     *                                         stack passed in $tokens.
156
-     *
157
-     * @return void
158
-     */
159
-    public function process(File $phpcsFile, $stackPtr)
160
-    {
161
-        $tokens = $phpcsFile->getTokens();
162
-
163
-        /*
30
+	/**
31
+	 * A list of keywords that can not be used as function, class and namespace name or constant name.
32
+	 * Mentions since which version it's not allowed.
33
+	 *
34
+	 * @var array(string => string)
35
+	 */
36
+	protected $invalidNames = array(
37
+		'abstract'      => '5.0',
38
+		'and'           => 'all',
39
+		'array'         => 'all',
40
+		'as'            => 'all',
41
+		'break'         => 'all',
42
+		'callable'      => '5.4',
43
+		'case'          => 'all',
44
+		'catch'         => '5.0',
45
+		'class'         => 'all',
46
+		'clone'         => '5.0',
47
+		'const'         => 'all',
48
+		'continue'      => 'all',
49
+		'declare'       => 'all',
50
+		'default'       => 'all',
51
+		'do'            => 'all',
52
+		'else'          => 'all',
53
+		'elseif'        => 'all',
54
+		'enddeclare'    => 'all',
55
+		'endfor'        => 'all',
56
+		'endforeach'    => 'all',
57
+		'endif'         => 'all',
58
+		'endswitch'     => 'all',
59
+		'endwhile'      => 'all',
60
+		'extends'       => 'all',
61
+		'final'         => '5.0',
62
+		'finally'       => '5.5',
63
+		'for'           => 'all',
64
+		'foreach'       => 'all',
65
+		'function'      => 'all',
66
+		'global'        => 'all',
67
+		'goto'          => '5.3',
68
+		'if'            => 'all',
69
+		'implements'    => '5.0',
70
+		'interface'     => '5.0',
71
+		'instanceof'    => '5.0',
72
+		'insteadof'     => '5.4',
73
+		'namespace'     => '5.3',
74
+		'new'           => 'all',
75
+		'or'            => 'all',
76
+		'private'       => '5.0',
77
+		'protected'     => '5.0',
78
+		'public'        => '5.0',
79
+		'static'        => 'all',
80
+		'switch'        => 'all',
81
+		'throw'         => '5.0',
82
+		'trait'         => '5.4',
83
+		'try'           => '5.0',
84
+		'use'           => 'all',
85
+		'var'           => 'all',
86
+		'while'         => 'all',
87
+		'xor'           => 'all',
88
+		'__class__'     => 'all',
89
+		'__dir__'       => '5.3',
90
+		'__file__'      => 'all',
91
+		'__function__'  => 'all',
92
+		'__method__'    => 'all',
93
+		'__namespace__' => '5.3',
94
+	);
95
+
96
+	/**
97
+	 * A list of keywords that can follow use statements.
98
+	 *
99
+	 * @var array(string => string)
100
+	 */
101
+	protected $validUseNames = array(
102
+		'const'    => true,
103
+		'function' => true,
104
+	);
105
+
106
+	/**
107
+	 * Scope modifiers and other keywords allowed in trait use statements.
108
+	 *
109
+	 * @var array
110
+	 */
111
+	private $allowedModifiers = array();
112
+
113
+	/**
114
+	 * Targeted tokens.
115
+	 *
116
+	 * @var array
117
+	 */
118
+	protected $targetedTokens = array(
119
+		\T_CLASS,
120
+		\T_FUNCTION,
121
+		\T_NAMESPACE,
122
+		\T_STRING,
123
+		\T_CONST,
124
+		\T_USE,
125
+		\T_AS,
126
+		\T_EXTENDS,
127
+		\T_INTERFACE,
128
+		\T_TRAIT,
129
+	);
130
+
131
+	/**
132
+	 * Returns an array of tokens this test wants to listen for.
133
+	 *
134
+	 * @return array
135
+	 */
136
+	public function register()
137
+	{
138
+		$this->allowedModifiers           = Tokens::$scopeModifiers;
139
+		$this->allowedModifiers[\T_FINAL] = \T_FINAL;
140
+
141
+		$tokens = $this->targetedTokens;
142
+
143
+		if (\defined('T_ANON_CLASS')) {
144
+			$tokens[] = \T_ANON_CLASS;
145
+		}
146
+
147
+		return $tokens;
148
+	}
149
+
150
+	/**
151
+	 * Processes this test, when one of its tokens is encountered.
152
+	 *
153
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
154
+	 * @param int                   $stackPtr  The position of the current token in the
155
+	 *                                         stack passed in $tokens.
156
+	 *
157
+	 * @return void
158
+	 */
159
+	public function process(File $phpcsFile, $stackPtr)
160
+	{
161
+		$tokens = $phpcsFile->getTokens();
162
+
163
+		/*
164 164
          * We distinguish between the class, function and namespace names vs the define statements.
165 165
          */
166
-        if ($tokens[$stackPtr]['type'] === 'T_STRING') {
167
-            $this->processString($phpcsFile, $stackPtr, $tokens);
168
-        } else {
169
-            $this->processNonString($phpcsFile, $stackPtr, $tokens);
170
-        }
171
-    }
172
-
173
-    /**
174
-     * Processes this test, when one of its tokens is encountered.
175
-     *
176
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
177
-     * @param int                   $stackPtr  The position of the current token in the
178
-     *                                         stack passed in $tokens.
179
-     * @param array                 $tokens    The stack of tokens that make up
180
-     *                                         the file.
181
-     *
182
-     * @return void
183
-     */
184
-    public function processNonString(File $phpcsFile, $stackPtr, $tokens)
185
-    {
186
-        $nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
187
-        if ($nextNonEmpty === false) {
188
-            return;
189
-        }
190
-
191
-        /*
166
+		if ($tokens[$stackPtr]['type'] === 'T_STRING') {
167
+			$this->processString($phpcsFile, $stackPtr, $tokens);
168
+		} else {
169
+			$this->processNonString($phpcsFile, $stackPtr, $tokens);
170
+		}
171
+	}
172
+
173
+	/**
174
+	 * Processes this test, when one of its tokens is encountered.
175
+	 *
176
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
177
+	 * @param int                   $stackPtr  The position of the current token in the
178
+	 *                                         stack passed in $tokens.
179
+	 * @param array                 $tokens    The stack of tokens that make up
180
+	 *                                         the file.
181
+	 *
182
+	 * @return void
183
+	 */
184
+	public function processNonString(File $phpcsFile, $stackPtr, $tokens)
185
+	{
186
+		$nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
187
+		if ($nextNonEmpty === false) {
188
+			return;
189
+		}
190
+
191
+		/*
192 192
          * Deal with anonymous classes - `class` before a reserved keyword is sometimes
193 193
          * misidentified as `T_ANON_CLASS`.
194 194
          * In PHPCS < 2.3.4 these were tokenized as T_CLASS no matter what.
195 195
          */
196
-        if ($tokens[$stackPtr]['type'] === 'T_ANON_CLASS' || $tokens[$stackPtr]['type'] === 'T_CLASS') {
197
-            $prevNonEmpty = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
198
-            if ($prevNonEmpty !== false && $tokens[$prevNonEmpty]['type'] === 'T_NEW') {
199
-                return;
200
-            }
201
-        }
202
-
203
-        /*
196
+		if ($tokens[$stackPtr]['type'] === 'T_ANON_CLASS' || $tokens[$stackPtr]['type'] === 'T_CLASS') {
197
+			$prevNonEmpty = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
198
+			if ($prevNonEmpty !== false && $tokens[$prevNonEmpty]['type'] === 'T_NEW') {
199
+				return;
200
+			}
201
+		}
202
+
203
+		/*
204 204
          * PHP 5.6 allows for use const and use function, but only if followed by the function/constant name.
205 205
          * - `use function HelloWorld` => move to the next token (HelloWorld) to verify.
206 206
          * - `use const HelloWorld` => move to the next token (HelloWorld) to verify.
207 207
          */
208
-        elseif ($tokens[$stackPtr]['type'] === 'T_USE'
209
-            && isset($this->validUseNames[strtolower($tokens[$nextNonEmpty]['content'])]) === true
210
-        ) {
211
-            $maybeUseNext = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true, null, true);
212
-            if ($maybeUseNext !== false && $this->isEndOfUseStatement($tokens[$maybeUseNext]) === false) {
213
-                $nextNonEmpty = $maybeUseNext;
214
-            }
215
-        }
216
-
217
-        /*
208
+		elseif ($tokens[$stackPtr]['type'] === 'T_USE'
209
+			&& isset($this->validUseNames[strtolower($tokens[$nextNonEmpty]['content'])]) === true
210
+		) {
211
+			$maybeUseNext = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true, null, true);
212
+			if ($maybeUseNext !== false && $this->isEndOfUseStatement($tokens[$maybeUseNext]) === false) {
213
+				$nextNonEmpty = $maybeUseNext;
214
+			}
215
+		}
216
+
217
+		/*
218 218
          * Deal with visibility modifiers.
219 219
          * - `use HelloWorld { sayHello as protected; }` => valid, bow out.
220 220
          * - `use HelloWorld { sayHello as private myPrivateHello; }` => move to the next token to verify.
221 221
          */
222
-        elseif ($tokens[$stackPtr]['type'] === 'T_AS'
223
-            && isset($this->allowedModifiers[$tokens[$nextNonEmpty]['code']]) === true
224
-            && $phpcsFile->hasCondition($stackPtr, \T_USE) === true
225
-        ) {
226
-            $maybeUseNext = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true, null, true);
227
-            if ($maybeUseNext === false || $this->isEndOfUseStatement($tokens[$maybeUseNext]) === true) {
228
-                return;
229
-            }
230
-
231
-            $nextNonEmpty = $maybeUseNext;
232
-        }
233
-
234
-        /*
222
+		elseif ($tokens[$stackPtr]['type'] === 'T_AS'
223
+			&& isset($this->allowedModifiers[$tokens[$nextNonEmpty]['code']]) === true
224
+			&& $phpcsFile->hasCondition($stackPtr, \T_USE) === true
225
+		) {
226
+			$maybeUseNext = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true, null, true);
227
+			if ($maybeUseNext === false || $this->isEndOfUseStatement($tokens[$maybeUseNext]) === true) {
228
+				return;
229
+			}
230
+
231
+			$nextNonEmpty = $maybeUseNext;
232
+		}
233
+
234
+		/*
235 235
          * Deal with functions declared to return by reference.
236 236
          */
237
-        elseif ($tokens[$stackPtr]['type'] === 'T_FUNCTION'
238
-            && $tokens[$nextNonEmpty]['type'] === 'T_BITWISE_AND'
239
-        ) {
240
-            $maybeUseNext = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true, null, true);
241
-            if ($maybeUseNext === false) {
242
-                // Live coding.
243
-                return;
244
-            }
245
-
246
-            $nextNonEmpty = $maybeUseNext;
247
-        }
248
-
249
-        /*
237
+		elseif ($tokens[$stackPtr]['type'] === 'T_FUNCTION'
238
+			&& $tokens[$nextNonEmpty]['type'] === 'T_BITWISE_AND'
239
+		) {
240
+			$maybeUseNext = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true, null, true);
241
+			if ($maybeUseNext === false) {
242
+				// Live coding.
243
+				return;
244
+			}
245
+
246
+			$nextNonEmpty = $maybeUseNext;
247
+		}
248
+
249
+		/*
250 250
          * Deal with nested namespaces.
251 251
          */
252
-        elseif ($tokens[$stackPtr]['type'] === 'T_NAMESPACE') {
253
-            if ($tokens[$stackPtr + 1]['code'] === \T_NS_SEPARATOR) {
254
-                // Not a namespace declaration, but use of, i.e. namespace\someFunction();
255
-                return;
256
-            }
257
-
258
-            $endToken      = $phpcsFile->findNext(array(\T_SEMICOLON, \T_OPEN_CURLY_BRACKET), ($stackPtr + 1), null, false, null, true);
259
-            $namespaceName = trim($phpcsFile->getTokensAsString(($stackPtr + 1), ($endToken - $stackPtr - 1)));
260
-            if (empty($namespaceName) === true) {
261
-                return;
262
-            }
263
-
264
-            $namespaceParts = explode('\\', $namespaceName);
265
-            foreach ($namespaceParts as $namespacePart) {
266
-                $partLc = strtolower($namespacePart);
267
-                if (isset($this->invalidNames[$partLc]) === false) {
268
-                    continue;
269
-                }
270
-
271
-                // Find the token position of the part which matched.
272
-                for ($i = ($stackPtr + 1); $i < $endToken; $i++) {
273
-                    if ($tokens[$i]['content'] === $namespacePart) {
274
-                        $nextNonEmpty = $i;
275
-                        break;
276
-                    }
277
-                }
278
-            }
279
-            unset($i, $namespacePart, $partLc);
280
-        }
281
-
282
-        $nextContentLc = strtolower($tokens[$nextNonEmpty]['content']);
283
-        if (isset($this->invalidNames[$nextContentLc]) === false) {
284
-            return;
285
-        }
286
-
287
-        /*
252
+		elseif ($tokens[$stackPtr]['type'] === 'T_NAMESPACE') {
253
+			if ($tokens[$stackPtr + 1]['code'] === \T_NS_SEPARATOR) {
254
+				// Not a namespace declaration, but use of, i.e. namespace\someFunction();
255
+				return;
256
+			}
257
+
258
+			$endToken      = $phpcsFile->findNext(array(\T_SEMICOLON, \T_OPEN_CURLY_BRACKET), ($stackPtr + 1), null, false, null, true);
259
+			$namespaceName = trim($phpcsFile->getTokensAsString(($stackPtr + 1), ($endToken - $stackPtr - 1)));
260
+			if (empty($namespaceName) === true) {
261
+				return;
262
+			}
263
+
264
+			$namespaceParts = explode('\\', $namespaceName);
265
+			foreach ($namespaceParts as $namespacePart) {
266
+				$partLc = strtolower($namespacePart);
267
+				if (isset($this->invalidNames[$partLc]) === false) {
268
+					continue;
269
+				}
270
+
271
+				// Find the token position of the part which matched.
272
+				for ($i = ($stackPtr + 1); $i < $endToken; $i++) {
273
+					if ($tokens[$i]['content'] === $namespacePart) {
274
+						$nextNonEmpty = $i;
275
+						break;
276
+					}
277
+				}
278
+			}
279
+			unset($i, $namespacePart, $partLc);
280
+		}
281
+
282
+		$nextContentLc = strtolower($tokens[$nextNonEmpty]['content']);
283
+		if (isset($this->invalidNames[$nextContentLc]) === false) {
284
+			return;
285
+		}
286
+
287
+		/*
288 288
          * Deal with PHP 7 relaxing the rules.
289 289
          * "As of PHP 7.0.0 these keywords are allowed as property, constant, and method names
290 290
          * of classes, interfaces and traits, except that class may not be used as constant name."
291 291
          */
292
-        if ((($tokens[$stackPtr]['type'] === 'T_FUNCTION'
293
-                && $this->inClassScope($phpcsFile, $stackPtr, false) === true)
294
-            || ($tokens[$stackPtr]['type'] === 'T_CONST'
295
-                && $this->isClassConstant($phpcsFile, $stackPtr) === true
296
-                && $nextContentLc !== 'class'))
297
-            && $this->supportsBelow('5.6') === false
298
-        ) {
299
-            return;
300
-        }
301
-
302
-        if ($this->supportsAbove($this->invalidNames[$nextContentLc])) {
303
-            $data = array(
304
-                $tokens[$nextNonEmpty]['content'],
305
-                $this->invalidNames[$nextContentLc],
306
-            );
307
-            $this->addError($phpcsFile, $stackPtr, $tokens[$nextNonEmpty]['content'], $data);
308
-        }
309
-    }
310
-
311
-    /**
312
-     * Processes this test, when one of its tokens is encountered.
313
-     *
314
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
315
-     * @param int                   $stackPtr  The position of the current token in the
316
-     *                                         stack passed in $tokens.
317
-     * @param array                 $tokens    The stack of tokens that make up
318
-     *                                         the file.
319
-     *
320
-     * @return void
321
-     */
322
-    public function processString(File $phpcsFile, $stackPtr, $tokens)
323
-    {
324
-        $tokenContentLc = strtolower($tokens[$stackPtr]['content']);
325
-
326
-        /*
292
+		if ((($tokens[$stackPtr]['type'] === 'T_FUNCTION'
293
+				&& $this->inClassScope($phpcsFile, $stackPtr, false) === true)
294
+			|| ($tokens[$stackPtr]['type'] === 'T_CONST'
295
+				&& $this->isClassConstant($phpcsFile, $stackPtr) === true
296
+				&& $nextContentLc !== 'class'))
297
+			&& $this->supportsBelow('5.6') === false
298
+		) {
299
+			return;
300
+		}
301
+
302
+		if ($this->supportsAbove($this->invalidNames[$nextContentLc])) {
303
+			$data = array(
304
+				$tokens[$nextNonEmpty]['content'],
305
+				$this->invalidNames[$nextContentLc],
306
+			);
307
+			$this->addError($phpcsFile, $stackPtr, $tokens[$nextNonEmpty]['content'], $data);
308
+		}
309
+	}
310
+
311
+	/**
312
+	 * Processes this test, when one of its tokens is encountered.
313
+	 *
314
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
315
+	 * @param int                   $stackPtr  The position of the current token in the
316
+	 *                                         stack passed in $tokens.
317
+	 * @param array                 $tokens    The stack of tokens that make up
318
+	 *                                         the file.
319
+	 *
320
+	 * @return void
321
+	 */
322
+	public function processString(File $phpcsFile, $stackPtr, $tokens)
323
+	{
324
+		$tokenContentLc = strtolower($tokens[$stackPtr]['content']);
325
+
326
+		/*
327 327
          * Special case for PHP versions where the target is not yet identified as
328 328
          * its own token, but presents as T_STRING.
329 329
          * - trait keyword in PHP < 5.4
330 330
          */
331
-        if (version_compare(\PHP_VERSION_ID, '50400', '<') && $tokenContentLc === 'trait') {
332
-            $this->processNonString($phpcsFile, $stackPtr, $tokens);
333
-            return;
334
-        }
335
-
336
-        // Look for any define/defined tokens (both T_STRING ones, blame Tokenizer).
337
-        if ($tokenContentLc !== 'define' && $tokenContentLc !== 'defined') {
338
-            return;
339
-        }
340
-
341
-        // Retrieve the define(d) constant name.
342
-        $firstParam = $this->getFunctionCallParameter($phpcsFile, $stackPtr, 1);
343
-        if ($firstParam === false) {
344
-            return;
345
-        }
346
-
347
-        $defineName   = $this->stripQuotes($firstParam['raw']);
348
-        $defineNameLc = strtolower($defineName);
349
-
350
-        if (isset($this->invalidNames[$defineNameLc]) && $this->supportsAbove($this->invalidNames[$defineNameLc])) {
351
-            $data = array(
352
-                $defineName,
353
-                $this->invalidNames[$defineNameLc],
354
-            );
355
-            $this->addError($phpcsFile, $stackPtr, $defineNameLc, $data);
356
-        }
357
-    }
358
-
359
-
360
-    /**
361
-     * Add the error message.
362
-     *
363
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
364
-     * @param int                   $stackPtr  The position of the current token in the
365
-     *                                         stack passed in $tokens.
366
-     * @param string                $content   The token content found.
367
-     * @param array                 $data      The data to pass into the error message.
368
-     *
369
-     * @return void
370
-     */
371
-    protected function addError(File $phpcsFile, $stackPtr, $content, $data)
372
-    {
373
-        $error     = "Function name, class name, namespace name or constant name can not be reserved keyword '%s' (since version %s)";
374
-        $errorCode = $this->stringToErrorCode($content) . 'Found';
375
-        $phpcsFile->addError($error, $stackPtr, $errorCode, $data);
376
-    }
377
-
378
-
379
-    /**
380
-     * Check if the current token code is for a token which can be considered
381
-     * the end of a (partial) use statement.
382
-     *
383
-     * @param int $token The current token information.
384
-     *
385
-     * @return bool
386
-     */
387
-    protected function isEndOfUseStatement($token)
388
-    {
389
-        return \in_array($token['code'], array(\T_CLOSE_CURLY_BRACKET, \T_SEMICOLON, \T_COMMA), true);
390
-    }
331
+		if (version_compare(\PHP_VERSION_ID, '50400', '<') && $tokenContentLc === 'trait') {
332
+			$this->processNonString($phpcsFile, $stackPtr, $tokens);
333
+			return;
334
+		}
335
+
336
+		// Look for any define/defined tokens (both T_STRING ones, blame Tokenizer).
337
+		if ($tokenContentLc !== 'define' && $tokenContentLc !== 'defined') {
338
+			return;
339
+		}
340
+
341
+		// Retrieve the define(d) constant name.
342
+		$firstParam = $this->getFunctionCallParameter($phpcsFile, $stackPtr, 1);
343
+		if ($firstParam === false) {
344
+			return;
345
+		}
346
+
347
+		$defineName   = $this->stripQuotes($firstParam['raw']);
348
+		$defineNameLc = strtolower($defineName);
349
+
350
+		if (isset($this->invalidNames[$defineNameLc]) && $this->supportsAbove($this->invalidNames[$defineNameLc])) {
351
+			$data = array(
352
+				$defineName,
353
+				$this->invalidNames[$defineNameLc],
354
+			);
355
+			$this->addError($phpcsFile, $stackPtr, $defineNameLc, $data);
356
+		}
357
+	}
358
+
359
+
360
+	/**
361
+	 * Add the error message.
362
+	 *
363
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
364
+	 * @param int                   $stackPtr  The position of the current token in the
365
+	 *                                         stack passed in $tokens.
366
+	 * @param string                $content   The token content found.
367
+	 * @param array                 $data      The data to pass into the error message.
368
+	 *
369
+	 * @return void
370
+	 */
371
+	protected function addError(File $phpcsFile, $stackPtr, $content, $data)
372
+	{
373
+		$error     = "Function name, class name, namespace name or constant name can not be reserved keyword '%s' (since version %s)";
374
+		$errorCode = $this->stringToErrorCode($content) . 'Found';
375
+		$phpcsFile->addError($error, $stackPtr, $errorCode, $data);
376
+	}
377
+
378
+
379
+	/**
380
+	 * Check if the current token code is for a token which can be considered
381
+	 * the end of a (partial) use statement.
382
+	 *
383
+	 * @param int $token The current token information.
384
+	 *
385
+	 * @return bool
386
+	 */
387
+	protected function isEndOfUseStatement($token)
388
+	{
389
+		return \in_array($token['code'], array(\T_CLOSE_CURLY_BRACKET, \T_SEMICOLON, \T_COMMA), true);
390
+	}
391 391
 }
Please login to merge, or discard this patch.
Sniffs/ControlStructures/DiscouragedSwitchContinueSniff.php 1 patch
Indentation   +191 added lines, -191 removed lines patch added patch discarded remove patch
@@ -29,195 +29,195 @@
 block discarded – undo
29 29
 class DiscouragedSwitchContinueSniff extends Sniff
30 30
 {
31 31
 
32
-    /**
33
-     * Token codes of control structures which can be targeted using continue.
34
-     *
35
-     * @var array
36
-     */
37
-    protected $loopStructures = array(
38
-        \T_FOR     => \T_FOR,
39
-        \T_FOREACH => \T_FOREACH,
40
-        \T_WHILE   => \T_WHILE,
41
-        \T_DO      => \T_DO,
42
-        \T_SWITCH  => \T_SWITCH,
43
-    );
44
-
45
-    /**
46
-     * Tokens which start a new case within a switch.
47
-     *
48
-     * @var array
49
-     */
50
-    protected $caseTokens = array(
51
-        \T_CASE    => \T_CASE,
52
-        \T_DEFAULT => \T_DEFAULT,
53
-    );
54
-
55
-    /**
56
-     * Token codes which are accepted to determine the level for the continue.
57
-     *
58
-     * This array is enriched with the arithmetic operators in the register() method.
59
-     *
60
-     * @var array
61
-     */
62
-    protected $acceptedLevelTokens = array(
63
-        \T_LNUMBER           => \T_LNUMBER,
64
-        \T_OPEN_PARENTHESIS  => \T_OPEN_PARENTHESIS,
65
-        \T_CLOSE_PARENTHESIS => \T_CLOSE_PARENTHESIS,
66
-    );
67
-
68
-
69
-    /**
70
-     * Returns an array of tokens this test wants to listen for.
71
-     *
72
-     * @return array
73
-     */
74
-    public function register()
75
-    {
76
-        $this->acceptedLevelTokens += Tokens::$arithmeticTokens;
77
-        $this->acceptedLevelTokens += Tokens::$emptyTokens;
78
-
79
-        return array(\T_SWITCH);
80
-    }
81
-
82
-    /**
83
-     * Processes this test, when one of its tokens is encountered.
84
-     *
85
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
86
-     * @param int                   $stackPtr  The position of the current token in the
87
-     *                                         stack passed in $tokens.
88
-     *
89
-     * @return void
90
-     */
91
-    public function process(File $phpcsFile, $stackPtr)
92
-    {
93
-        if ($this->supportsAbove('7.3') === false) {
94
-            return;
95
-        }
96
-
97
-        $tokens = $phpcsFile->getTokens();
98
-
99
-        if (isset($tokens[$stackPtr]['scope_opener'], $tokens[$stackPtr]['scope_closer']) === false) {
100
-            return;
101
-        }
102
-
103
-        $switchOpener = $tokens[$stackPtr]['scope_opener'];
104
-        $switchCloser = $tokens[$stackPtr]['scope_closer'];
105
-
106
-        // Quick check whether we need to bother with the more complex logic.
107
-        $hasContinue = $phpcsFile->findNext(\T_CONTINUE, ($switchOpener + 1), $switchCloser);
108
-        if ($hasContinue === false) {
109
-            return;
110
-        }
111
-
112
-        $caseDefault = $switchOpener;
113
-
114
-        do {
115
-            $caseDefault = $phpcsFile->findNext($this->caseTokens, ($caseDefault + 1), $switchCloser);
116
-            if ($caseDefault === false) {
117
-                break;
118
-            }
119
-
120
-            if (isset($tokens[$caseDefault]['scope_opener']) === false) {
121
-                // Unknown start of the case, skip.
122
-                continue;
123
-            }
124
-
125
-            $caseOpener      = $tokens[$caseDefault]['scope_opener'];
126
-            $nextCaseDefault = $phpcsFile->findNext($this->caseTokens, ($caseDefault + 1), $switchCloser);
127
-            if ($nextCaseDefault === false) {
128
-                $caseCloser = $switchCloser;
129
-            } else {
130
-                $caseCloser = $nextCaseDefault;
131
-            }
132
-
133
-            // Check for unscoped control structures within the case.
134
-            $controlStructure = $caseOpener;
135
-            $doCount          = 0;
136
-            while (($controlStructure = $phpcsFile->findNext($this->loopStructures, ($controlStructure + 1), $caseCloser)) !== false) {
137
-                if ($tokens[$controlStructure]['code'] === \T_DO) {
138
-                    $doCount++;
139
-                }
140
-
141
-                if (isset($tokens[$controlStructure]['scope_opener'], $tokens[$controlStructure]['scope_closer']) === false) {
142
-                    if ($tokens[$controlStructure]['code'] === \T_WHILE && $doCount > 0) {
143
-                        // While in a do-while construct.
144
-                        $doCount--;
145
-                        continue;
146
-                    }
147
-
148
-                    // Control structure without braces found within the case, ignore this case.
149
-                    continue 2;
150
-                }
151
-            }
152
-
153
-            // Examine the contents of the case.
154
-            $continue = $caseOpener;
155
-
156
-            do {
157
-                $continue = $phpcsFile->findNext(\T_CONTINUE, ($continue + 1), $caseCloser);
158
-                if ($continue === false) {
159
-                    break;
160
-                }
161
-
162
-                $nextSemicolon = $phpcsFile->findNext(array(\T_SEMICOLON, \T_CLOSE_TAG), ($continue + 1), $caseCloser);
163
-                $codeString    = '';
164
-                for ($i = ($continue + 1); $i < $nextSemicolon; $i++) {
165
-                    if (isset($this->acceptedLevelTokens[$tokens[$i]['code']]) === false) {
166
-                        // Function call/variable or other token which make numeric level impossible to determine.
167
-                        continue 2;
168
-                    }
169
-
170
-                    if (isset(Tokens::$emptyTokens[$tokens[$i]['code']]) === true) {
171
-                        continue;
172
-                    }
173
-
174
-                    $codeString .= $tokens[$i]['content'];
175
-                }
176
-
177
-                $level = null;
178
-                if ($codeString !== '') {
179
-                    if (is_numeric($codeString)) {
180
-                        $level = (int) $codeString;
181
-                    } else {
182
-                        // With the above logic, the string can only contain digits and operators, eval!
183
-                        $level = eval("return ( $codeString );");
184
-                    }
185
-                }
186
-
187
-                if (isset($level) === false || $level === 0) {
188
-                    $level = 1;
189
-                }
190
-
191
-                // Examine which control structure is being targeted by the continue statement.
192
-                if (isset($tokens[$continue]['conditions']) === false) {
193
-                    continue;
194
-                }
195
-
196
-                $conditions = array_reverse($tokens[$continue]['conditions'], true);
197
-                // PHPCS adds more structures to the conditions array than we want to take into
198
-                // consideration, so clean up the array.
199
-                foreach ($conditions as $tokenPtr => $tokenCode) {
200
-                    if (isset($this->loopStructures[$tokenCode]) === false) {
201
-                        unset($conditions[$tokenPtr]);
202
-                    }
203
-                }
204
-
205
-                $targetCondition = \array_slice($conditions, ($level - 1), 1, true);
206
-                if (empty($targetCondition)) {
207
-                    continue;
208
-                }
209
-
210
-                $conditionToken = key($targetCondition);
211
-                if ($conditionToken === $stackPtr) {
212
-                    $phpcsFile->addWarning(
213
-                        "Targeting a 'switch' control structure with a 'continue' statement is strongly discouraged and will throw a warning as of PHP 7.3.",
214
-                        $continue,
215
-                        'Found'
216
-                    );
217
-                }
218
-
219
-            } while ($continue < $caseCloser);
220
-
221
-        } while ($caseDefault < $switchCloser);
222
-    }
32
+	/**
33
+	 * Token codes of control structures which can be targeted using continue.
34
+	 *
35
+	 * @var array
36
+	 */
37
+	protected $loopStructures = array(
38
+		\T_FOR     => \T_FOR,
39
+		\T_FOREACH => \T_FOREACH,
40
+		\T_WHILE   => \T_WHILE,
41
+		\T_DO      => \T_DO,
42
+		\T_SWITCH  => \T_SWITCH,
43
+	);
44
+
45
+	/**
46
+	 * Tokens which start a new case within a switch.
47
+	 *
48
+	 * @var array
49
+	 */
50
+	protected $caseTokens = array(
51
+		\T_CASE    => \T_CASE,
52
+		\T_DEFAULT => \T_DEFAULT,
53
+	);
54
+
55
+	/**
56
+	 * Token codes which are accepted to determine the level for the continue.
57
+	 *
58
+	 * This array is enriched with the arithmetic operators in the register() method.
59
+	 *
60
+	 * @var array
61
+	 */
62
+	protected $acceptedLevelTokens = array(
63
+		\T_LNUMBER           => \T_LNUMBER,
64
+		\T_OPEN_PARENTHESIS  => \T_OPEN_PARENTHESIS,
65
+		\T_CLOSE_PARENTHESIS => \T_CLOSE_PARENTHESIS,
66
+	);
67
+
68
+
69
+	/**
70
+	 * Returns an array of tokens this test wants to listen for.
71
+	 *
72
+	 * @return array
73
+	 */
74
+	public function register()
75
+	{
76
+		$this->acceptedLevelTokens += Tokens::$arithmeticTokens;
77
+		$this->acceptedLevelTokens += Tokens::$emptyTokens;
78
+
79
+		return array(\T_SWITCH);
80
+	}
81
+
82
+	/**
83
+	 * Processes this test, when one of its tokens is encountered.
84
+	 *
85
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
86
+	 * @param int                   $stackPtr  The position of the current token in the
87
+	 *                                         stack passed in $tokens.
88
+	 *
89
+	 * @return void
90
+	 */
91
+	public function process(File $phpcsFile, $stackPtr)
92
+	{
93
+		if ($this->supportsAbove('7.3') === false) {
94
+			return;
95
+		}
96
+
97
+		$tokens = $phpcsFile->getTokens();
98
+
99
+		if (isset($tokens[$stackPtr]['scope_opener'], $tokens[$stackPtr]['scope_closer']) === false) {
100
+			return;
101
+		}
102
+
103
+		$switchOpener = $tokens[$stackPtr]['scope_opener'];
104
+		$switchCloser = $tokens[$stackPtr]['scope_closer'];
105
+
106
+		// Quick check whether we need to bother with the more complex logic.
107
+		$hasContinue = $phpcsFile->findNext(\T_CONTINUE, ($switchOpener + 1), $switchCloser);
108
+		if ($hasContinue === false) {
109
+			return;
110
+		}
111
+
112
+		$caseDefault = $switchOpener;
113
+
114
+		do {
115
+			$caseDefault = $phpcsFile->findNext($this->caseTokens, ($caseDefault + 1), $switchCloser);
116
+			if ($caseDefault === false) {
117
+				break;
118
+			}
119
+
120
+			if (isset($tokens[$caseDefault]['scope_opener']) === false) {
121
+				// Unknown start of the case, skip.
122
+				continue;
123
+			}
124
+
125
+			$caseOpener      = $tokens[$caseDefault]['scope_opener'];
126
+			$nextCaseDefault = $phpcsFile->findNext($this->caseTokens, ($caseDefault + 1), $switchCloser);
127
+			if ($nextCaseDefault === false) {
128
+				$caseCloser = $switchCloser;
129
+			} else {
130
+				$caseCloser = $nextCaseDefault;
131
+			}
132
+
133
+			// Check for unscoped control structures within the case.
134
+			$controlStructure = $caseOpener;
135
+			$doCount          = 0;
136
+			while (($controlStructure = $phpcsFile->findNext($this->loopStructures, ($controlStructure + 1), $caseCloser)) !== false) {
137
+				if ($tokens[$controlStructure]['code'] === \T_DO) {
138
+					$doCount++;
139
+				}
140
+
141
+				if (isset($tokens[$controlStructure]['scope_opener'], $tokens[$controlStructure]['scope_closer']) === false) {
142
+					if ($tokens[$controlStructure]['code'] === \T_WHILE && $doCount > 0) {
143
+						// While in a do-while construct.
144
+						$doCount--;
145
+						continue;
146
+					}
147
+
148
+					// Control structure without braces found within the case, ignore this case.
149
+					continue 2;
150
+				}
151
+			}
152
+
153
+			// Examine the contents of the case.
154
+			$continue = $caseOpener;
155
+
156
+			do {
157
+				$continue = $phpcsFile->findNext(\T_CONTINUE, ($continue + 1), $caseCloser);
158
+				if ($continue === false) {
159
+					break;
160
+				}
161
+
162
+				$nextSemicolon = $phpcsFile->findNext(array(\T_SEMICOLON, \T_CLOSE_TAG), ($continue + 1), $caseCloser);
163
+				$codeString    = '';
164
+				for ($i = ($continue + 1); $i < $nextSemicolon; $i++) {
165
+					if (isset($this->acceptedLevelTokens[$tokens[$i]['code']]) === false) {
166
+						// Function call/variable or other token which make numeric level impossible to determine.
167
+						continue 2;
168
+					}
169
+
170
+					if (isset(Tokens::$emptyTokens[$tokens[$i]['code']]) === true) {
171
+						continue;
172
+					}
173
+
174
+					$codeString .= $tokens[$i]['content'];
175
+				}
176
+
177
+				$level = null;
178
+				if ($codeString !== '') {
179
+					if (is_numeric($codeString)) {
180
+						$level = (int) $codeString;
181
+					} else {
182
+						// With the above logic, the string can only contain digits and operators, eval!
183
+						$level = eval("return ( $codeString );");
184
+					}
185
+				}
186
+
187
+				if (isset($level) === false || $level === 0) {
188
+					$level = 1;
189
+				}
190
+
191
+				// Examine which control structure is being targeted by the continue statement.
192
+				if (isset($tokens[$continue]['conditions']) === false) {
193
+					continue;
194
+				}
195
+
196
+				$conditions = array_reverse($tokens[$continue]['conditions'], true);
197
+				// PHPCS adds more structures to the conditions array than we want to take into
198
+				// consideration, so clean up the array.
199
+				foreach ($conditions as $tokenPtr => $tokenCode) {
200
+					if (isset($this->loopStructures[$tokenCode]) === false) {
201
+						unset($conditions[$tokenPtr]);
202
+					}
203
+				}
204
+
205
+				$targetCondition = \array_slice($conditions, ($level - 1), 1, true);
206
+				if (empty($targetCondition)) {
207
+					continue;
208
+				}
209
+
210
+				$conditionToken = key($targetCondition);
211
+				if ($conditionToken === $stackPtr) {
212
+					$phpcsFile->addWarning(
213
+						"Targeting a 'switch' control structure with a 'continue' statement is strongly discouraged and will throw a warning as of PHP 7.3.",
214
+						$continue,
215
+						'Found'
216
+					);
217
+				}
218
+
219
+			} while ($continue < $caseCloser);
220
+
221
+		} while ($caseDefault < $switchCloser);
222
+	}
223 223
 }
Please login to merge, or discard this patch.
Sniffs/ControlStructures/ForbiddenBreakContinueVariableArgumentsSniff.php 1 patch
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -30,72 +30,72 @@
 block discarded – undo
30 30
  */
31 31
 class ForbiddenBreakContinueVariableArgumentsSniff extends Sniff
32 32
 {
33
-    /**
34
-     * Error types this sniff handles for forbidden break/continue arguments.
35
-     *
36
-     * Array key is the error code. Array value will be used as part of the error message.
37
-     *
38
-     * @var array
39
-     */
40
-    private $errorTypes = array(
41
-        'variableArgument' => 'a variable argument',
42
-        'zeroArgument'     => '0 as an argument',
43
-    );
33
+	/**
34
+	 * Error types this sniff handles for forbidden break/continue arguments.
35
+	 *
36
+	 * Array key is the error code. Array value will be used as part of the error message.
37
+	 *
38
+	 * @var array
39
+	 */
40
+	private $errorTypes = array(
41
+		'variableArgument' => 'a variable argument',
42
+		'zeroArgument'     => '0 as an argument',
43
+	);
44 44
 
45
-    /**
46
-     * Returns an array of tokens this test wants to listen for.
47
-     *
48
-     * @return array
49
-     */
50
-    public function register()
51
-    {
52
-        return array(\T_BREAK, \T_CONTINUE);
53
-    }
45
+	/**
46
+	 * Returns an array of tokens this test wants to listen for.
47
+	 *
48
+	 * @return array
49
+	 */
50
+	public function register()
51
+	{
52
+		return array(\T_BREAK, \T_CONTINUE);
53
+	}
54 54
 
55
-    /**
56
-     * Processes this test, when one of its tokens is encountered.
57
-     *
58
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
59
-     * @param int                   $stackPtr  The position of the current token in the
60
-     *                                         stack passed in $tokens.
61
-     *
62
-     * @return void
63
-     */
64
-    public function process(File $phpcsFile, $stackPtr)
65
-    {
66
-        if ($this->supportsAbove('5.4') === false) {
67
-            return;
68
-        }
55
+	/**
56
+	 * Processes this test, when one of its tokens is encountered.
57
+	 *
58
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
59
+	 * @param int                   $stackPtr  The position of the current token in the
60
+	 *                                         stack passed in $tokens.
61
+	 *
62
+	 * @return void
63
+	 */
64
+	public function process(File $phpcsFile, $stackPtr)
65
+	{
66
+		if ($this->supportsAbove('5.4') === false) {
67
+			return;
68
+		}
69 69
 
70
-        $tokens             = $phpcsFile->getTokens();
71
-        $nextSemicolonToken = $phpcsFile->findNext(array(\T_SEMICOLON, \T_CLOSE_TAG), ($stackPtr), null, false);
72
-        $errorType          = '';
73
-        for ($curToken = $stackPtr + 1; $curToken < $nextSemicolonToken; $curToken++) {
74
-            if ($tokens[$curToken]['type'] === 'T_STRING') {
75
-                // If the next non-whitespace token after the string
76
-                // is an opening parenthesis then it's a function call.
77
-                $openBracket = $phpcsFile->findNext(Tokens::$emptyTokens, $curToken + 1, null, true);
78
-                if ($tokens[$openBracket]['code'] === \T_OPEN_PARENTHESIS) {
79
-                    $errorType = 'variableArgument';
80
-                    break;
81
-                }
70
+		$tokens             = $phpcsFile->getTokens();
71
+		$nextSemicolonToken = $phpcsFile->findNext(array(\T_SEMICOLON, \T_CLOSE_TAG), ($stackPtr), null, false);
72
+		$errorType          = '';
73
+		for ($curToken = $stackPtr + 1; $curToken < $nextSemicolonToken; $curToken++) {
74
+			if ($tokens[$curToken]['type'] === 'T_STRING') {
75
+				// If the next non-whitespace token after the string
76
+				// is an opening parenthesis then it's a function call.
77
+				$openBracket = $phpcsFile->findNext(Tokens::$emptyTokens, $curToken + 1, null, true);
78
+				if ($tokens[$openBracket]['code'] === \T_OPEN_PARENTHESIS) {
79
+					$errorType = 'variableArgument';
80
+					break;
81
+				}
82 82
 
83
-            } elseif (\in_array($tokens[$curToken]['type'], array('T_VARIABLE', 'T_FUNCTION', 'T_CLOSURE'), true)) {
84
-                $errorType = 'variableArgument';
85
-                break;
83
+			} elseif (\in_array($tokens[$curToken]['type'], array('T_VARIABLE', 'T_FUNCTION', 'T_CLOSURE'), true)) {
84
+				$errorType = 'variableArgument';
85
+				break;
86 86
 
87
-            } elseif ($tokens[$curToken]['type'] === 'T_LNUMBER' && $tokens[$curToken]['content'] === '0') {
88
-                $errorType = 'zeroArgument';
89
-                break;
90
-            }
91
-        }
87
+			} elseif ($tokens[$curToken]['type'] === 'T_LNUMBER' && $tokens[$curToken]['content'] === '0') {
88
+				$errorType = 'zeroArgument';
89
+				break;
90
+			}
91
+		}
92 92
 
93
-        if ($errorType !== '') {
94
-            $error     = 'Using %s on break or continue is forbidden since PHP 5.4';
95
-            $errorCode = $errorType . 'Found';
96
-            $data      = array($this->errorTypes[$errorType]);
93
+		if ($errorType !== '') {
94
+			$error     = 'Using %s on break or continue is forbidden since PHP 5.4';
95
+			$errorCode = $errorType . 'Found';
96
+			$data      = array($this->errorTypes[$errorType]);
97 97
 
98
-            $phpcsFile->addError($error, $stackPtr, $errorCode, $data);
99
-        }
100
-    }
98
+			$phpcsFile->addError($error, $stackPtr, $errorCode, $data);
99
+		}
100
+	}
101 101
 }
Please login to merge, or discard this patch.