diff --git a/src/lint/linter/__tests__/jshint/jshint.lint-test b/src/lint/linter/__tests__/jshint/jshint.lint-test --- a/src/lint/linter/__tests__/jshint/jshint.lint-test +++ b/src/lint/linter/__tests__/jshint/jshint.lint-test @@ -9,4 +9,4 @@ ~~~~~~~~~~ warning:3:8 error:7:1 -error:9: +error:9:1 diff --git a/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php --- a/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php +++ b/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php @@ -26,6 +26,7 @@ $whitelist = array( 'class' => array(), 'function' => array(), + 'constant' => array(), ); $conditionals = $root->selectDescendantsOfType('n_IF'); @@ -51,6 +52,7 @@ case 'class_exists': case 'function_exists': case 'interface_exists': + case 'defined': $type = null; switch ($function_name) { case 'class_exists': @@ -64,6 +66,10 @@ case 'interface_exists': $type = 'interface'; break; + + case 'defined': + $type = 'constant'; + break; } $params = $function->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); @@ -98,7 +104,6 @@ $min = idx($version, 'php.min'); $max = idx($version, 'php.max'); - // Check if whitelisted. $whitelisted = false; foreach (idx($whitelist['function'], $name, array()) as $range) { if (array_intersect($range, array_keys($node->getTokens()))) { @@ -178,18 +183,18 @@ $version = idx($compat_info['classes'], $name, $version); $min = idx($version, 'php.min'); $max = idx($version, 'php.max'); - // Check if whitelisted. - $whitelisted = false; - foreach (idx($whitelist['class'], $name, array()) as $range) { - if (array_intersect($range, array_keys($node->getTokens()))) { - $whitelisted = true; - break; - } - } - if ($whitelisted) { - continue; + $whitelisted = false; + foreach (idx($whitelist['class'], $name, array()) as $range) { + if (array_intersect($range, array_keys($node->getTokens()))) { + $whitelisted = true; + break; } + } + + if ($whitelisted) { + continue; + } if ($min && version_compare($min, $this->version, '>')) { $this->raiseLintAtNode( @@ -225,6 +230,18 @@ $min = idx($version, 'php.min'); $max = idx($version, 'php.max'); + $whitelisted = false; + foreach (idx($whitelist['constant'], $name, array()) as $range) { + if (array_intersect($range, array_keys($node->getTokens()))) { + $whitelisted = true; + break; + } + } + + if ($whitelisted) { + continue; + } + if ($min && version_compare($min, $this->version, '>')) { $this->raiseLintAtNode( $node,