mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-21 22:32:41 +01:00
36698b92af
Summary: Allows the `ArcanistXHPASTLinter` to determine whether constants can be used, based on the target PHP version. Also added class methods to the compatibility information, although this isn't used yet (it is small anyway). Test Plan: Created a test file that contained the `JSON_PRETTY_PRINT` constant. Verified that a linter error was raised. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: epriestley, Korvin Differential Revision: https://secure.phabricator.com/D9571
138 lines
4.7 KiB
PHP
Executable file
138 lines
4.7 KiB
PHP
Executable file
#!/usr/bin/env php
|
|
<?php
|
|
|
|
require_once dirname(__FILE__).'/__init_script__.php';
|
|
|
|
$target = 'resources/php_compat_info.json';
|
|
echo "Purpose: Updates {$target} used by ArcanistXHPASTLinter.\n";
|
|
|
|
require_once 'vendor/autoload.php';
|
|
|
|
$output = array();
|
|
$output['@'.'generated'] = true;
|
|
$output['params'] = array();
|
|
$output['functions'] = array();
|
|
$output['classes'] = array();
|
|
$output['interfaces'] = array();
|
|
$output['constants'] = array();
|
|
$output['classMethods'] = array();
|
|
|
|
$references = array(
|
|
new \Bartlett\CompatInfo\Reference\Extension\ApcExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\CoreExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\CurlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\DateExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\FileinfoExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\GdExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\GettextExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\HttpExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\ImagickExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\IntlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\JsonExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\LibxmlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\MysqlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\MysqliExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\PcntlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\PcreExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\PdoExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\PharExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\PosixExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\ReflectionExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\SimplexmlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\StandardExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\SplExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\XmlExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\XmlreaderExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\XmlwriterExtension(),
|
|
new \Bartlett\CompatInfo\Reference\Extension\YamlExtension(),
|
|
);
|
|
|
|
foreach ($references as $reference) {
|
|
foreach ($reference->getFunctions() as $function => $compat) {
|
|
$output['functions'][$function] = array(
|
|
'min' => nonempty($compat['php.min'], null),
|
|
'max' => nonempty($compat['php.max'], null),
|
|
);
|
|
|
|
if (idx($compat, 'parameters')) {
|
|
$output['params'][$function] = array_map(
|
|
'trim', explode(',', $compat['parameters']));
|
|
}
|
|
}
|
|
|
|
foreach ($reference->getInterfaces() as $interface => $compat) {
|
|
$output['interfaces'][$interface] = array(
|
|
'min' => nonempty($compat['php.min'], null),
|
|
'max' => nonempty($compat['php.max'], null),
|
|
);
|
|
}
|
|
|
|
foreach ($reference->getClasses() as $class => $compat) {
|
|
$output['classes'][$class] = array(
|
|
'min' => nonempty($compat['php.min'], null),
|
|
'max' => nonempty($compat['php.max'], null),
|
|
);
|
|
}
|
|
|
|
foreach ($reference->getConstants() as $constant => $compat) {
|
|
$output['constants'][$constant] = array(
|
|
'min' => nonempty($compat['php.min'], null),
|
|
'max' => nonempty($compat['php.max'], null),
|
|
);
|
|
}
|
|
|
|
foreach ($reference->getClassMethods() as $class => $methods) {
|
|
if (!array_key_exists($class, $output['classMethods'])) {
|
|
$output['classMethods'][$class] = array();
|
|
}
|
|
|
|
foreach ($methods as $method => $compat) {
|
|
$output['classMethods'][$class][$method] = array(
|
|
'min' => nonempty($compat['php.min'], null),
|
|
'max' => nonempty($compat['php.max'], null),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
ksort($output['params']);
|
|
ksort($output['functions']);
|
|
ksort($output['classes']);
|
|
ksort($output['interfaces']);
|
|
ksort($output['constants']);
|
|
ksort($output['classMethods']);
|
|
|
|
// Grepped from PHP Manual.
|
|
$output['functions_windows'] = array(
|
|
'apache_child_terminate' => '',
|
|
'chroot' => '',
|
|
'getrusage' => '',
|
|
'imagecreatefromxpm' => '',
|
|
'lchgrp' => '',
|
|
'lchown' => '',
|
|
'nl_langinfo' => '',
|
|
'strptime' => '',
|
|
'sys_getloadavg' => '',
|
|
'checkdnsrr' => '5.3.0',
|
|
'dns_get_record' => '5.3.0',
|
|
'fnmatch' => '5.3.0',
|
|
'getmxrr' => '5.3.0',
|
|
'getopt' => '5.3.0',
|
|
'imagecolorclosesthwb' => '5.3.0',
|
|
'inet_ntop' => '5.3.0',
|
|
'inet_pton' => '5.3.0',
|
|
'link' => '5.3.0',
|
|
'linkinfo' => '5.3.0',
|
|
'readlink' => '5.3.0',
|
|
'socket_create_pair' => '5.3.0',
|
|
'stream_socket_pair' => '5.3.0',
|
|
'symlink' => '5.3.0',
|
|
'time_nanosleep' => '5.3.0',
|
|
'time_sleep_until' => '5.3.0',
|
|
);
|
|
|
|
file_put_contents(
|
|
phutil_get_library_root('arcanist').'/../'.$target,
|
|
id(new PhutilJSON())->encodeFormatted($output));
|
|
|
|
echo "Done.\n";
|