1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-09 16:32:39 +01:00

Capture a wider range of version information in php_compat_info.json.

Summary: Ref T5141. Currently, `php_compat_info.json` is hardcoded to support PHP 5.2.3. Instead, store as much version information as possible in `php_compat_info.json` and filter accordingly in `ArcanistXHPASTLinter.`

Test Plan: Ran `arc lint` and made sure no additional warnings were raised.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T5141

Differential Revision: https://secure.phabricator.com/D9247
This commit is contained in:
Joshua Spence 2014-05-22 09:14:14 -07:00 committed by epriestley
parent bca14a368b
commit f13aa21b8e
3 changed files with 3248 additions and 328 deletions

File diff suppressed because it is too large Load diff

View file

@ -13,7 +13,6 @@ if (!$ok) {
exit(1); exit(1);
} }
$required = '5.2.3';
$reference = id(new PHP_CompatInfo_Reference_ALL())->getAll(); $reference = id(new PHP_CompatInfo_Reference_ALL())->getAll();
$output = array(); $output = array();
@ -26,15 +25,11 @@ foreach (array('functions', 'classes', 'interfaces') as $type) {
$name = strtolower($name); $name = strtolower($name);
$versions = reset($versions); $versions = reset($versions);
list($min, $max) = $versions; list($min, $max) = $versions;
if (version_compare($min, $required) > 0) { $output[$type][$name] = $min;
$output[$type][$name] = $min;
}
if ($type == 'functions' && isset($versions[4])) { if ($type == 'functions' && isset($versions[4])) {
$params = explode(', ', $versions[4]); $params = explode(', ', $versions[4]);
foreach ($params as $i => $version) { foreach ($params as $i => $version) {
if (version_compare($version, $required) > 0) { $output['params'][$name][$i] = $version;
$output['params'][$name][$i] = $version;
}
} }
} }
} }

View file

@ -448,6 +448,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
$target = phutil_get_library_root('arcanist'). $target = phutil_get_library_root('arcanist').
'/../resources/php_compat_info.json'; '/../resources/php_compat_info.json';
$compat_info = json_decode(file_get_contents($target), true); $compat_info = json_decode(file_get_contents($target), true);
$required = '5.2.3';
$calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
foreach ($calls as $call) { foreach ($calls as $call) {
@ -455,7 +456,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
$name = strtolower($node->getConcreteString()); $name = strtolower($node->getConcreteString());
$version = idx($compat_info['functions'], $name); $version = idx($compat_info['functions'], $name);
$windows = idx($compat_info['functions_windows'], $name); $windows = idx($compat_info['functions_windows'], $name);
if ($version) { if ($version && version_compare($version, $required, '>')) {
$this->raiseLintAtNode( $this->raiseLintAtNode(
$node, $node,
self::LINT_PHP_53_FEATURES, self::LINT_PHP_53_FEATURES,
@ -465,7 +466,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
$params = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); $params = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST');
foreach (array_values($params->getChildren()) as $i => $param) { foreach (array_values($params->getChildren()) as $i => $param) {
$version = idx($compat_info['params'][$name], $i); $version = idx($compat_info['params'][$name], $i);
if ($version) { if ($version && version_compare($version, $required, '>')) {
$this->raiseLintAtNode( $this->raiseLintAtNode(
$param, $param,
self::LINT_PHP_53_FEATURES, self::LINT_PHP_53_FEATURES,
@ -488,7 +489,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
$name = strtolower($node->getConcreteString()); $name = strtolower($node->getConcreteString());
$version = idx($compat_info['interfaces'], $name); $version = idx($compat_info['interfaces'], $name);
$version = idx($compat_info['classes'], $name, $version); $version = idx($compat_info['classes'], $name, $version);
if ($version) { if ($version && version_compare($version, $required, '>')) {
$this->raiseLintAtNode( $this->raiseLintAtNode(
$node, $node,
self::LINT_PHP_53_FEATURES, self::LINT_PHP_53_FEATURES,