Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15403492
D12472.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D12472.diff
View Options
diff --git a/src/lint/linter/ArcanistBaseXHPASTLinter.php b/src/lint/linter/ArcanistBaseXHPASTLinter.php
--- a/src/lint/linter/ArcanistBaseXHPASTLinter.php
+++ b/src/lint/linter/ArcanistBaseXHPASTLinter.php
@@ -196,6 +196,35 @@
return idx($this->exceptions, $path);
}
+
+/* -( Utility )------------------------------------------------------------ */
+
+ /**
+ * Retrieve all calls to some specified function(s).
+ *
+ * Returns all descendant nodes which represent a function call to one of the
+ * specified functions.
+ *
+ * @param XHPASTNode Root node.
+ * @param list<string> Function names.
+ * @return AASTNodeList
+ */
+ protected function getFunctionCalls(XHPASTNode $root, array $function_names) {
+ $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
+ $nodes = array();
+
+ foreach ($calls as $call) {
+ $node = $call->getChildByIndex(0);
+ $name = strtolower($node->getConcreteString());
+
+ if (in_array($name, $function_names)) {
+ $nodes[] = $call;
+ }
+ }
+
+ return AASTNodeList::newFromTreeAndNodes($root->getTree(), $nodes);
+ }
+
public function getSuperGlobalNames() {
return array(
'$GLOBALS',
diff --git a/src/lint/linter/ArcanistPhutilXHPASTLinter.php b/src/lint/linter/ArcanistPhutilXHPASTLinter.php
--- a/src/lint/linter/ArcanistPhutilXHPASTLinter.php
+++ b/src/lint/linter/ArcanistPhutilXHPASTLinter.php
@@ -21,21 +21,6 @@
'linter is intended for use in Phabricator libraries and extensions.');
}
- public function setDeprecatedFunctions(array $map) {
- $this->deprecatedFunctions = $map;
- return $this;
- }
-
- public function setDynamicStringFunctions(array $map) {
- $this->dynamicStringFunctions = $map;
- return $this;
- }
-
- public function setDynamicStringClasses(array $map) {
- $this->dynamicStringClasses = $map;
- return $this;
- }
-
public function getLintNameMap() {
return array(
self::LINT_ARRAY_COMBINE => pht(
@@ -49,16 +34,6 @@
);
}
- public function getLintSeverityMap() {
- $warning = ArcanistLintSeverity::SEVERITY_WARNING;
- return array(
- self::LINT_ARRAY_COMBINE => $warning,
- self::LINT_DEPRECATED_FUNCTION => $warning,
- self::LINT_UNSAFE_DYNAMIC_STRING => $warning,
- self::LINT_RAGGED_CLASSTREE_EDGE => $warning,
- );
- }
-
public function getLinterName() {
return 'PHLXHP';
}
@@ -67,9 +42,15 @@
return 'phutil-xhpast';
}
- public function getVersion() {
- // The version number should be incremented whenever a new rule is added.
- return '3';
+ public function getLintSeverityMap() {
+ $warning = ArcanistLintSeverity::SEVERITY_WARNING;
+
+ return array(
+ self::LINT_ARRAY_COMBINE => $warning,
+ self::LINT_DEPRECATED_FUNCTION => $warning,
+ self::LINT_UNSAFE_DYNAMIC_STRING => $warning,
+ self::LINT_RAGGED_CLASSTREE_EDGE => $warning,
+ );
}
public function getLinterConfigurationOptions() {
@@ -107,9 +88,15 @@
case 'phutil-xhpast.dynamic-string.classes':
$this->setDynamicStringClasses($value);
return;
+ default:
+ parent::setLinterConfigurationValue($key, $value);
+ return;
}
+ }
- return parent::setLinterConfigurationValue($key, $value);
+ public function getVersion() {
+ // The version number should be incremented whenever a new rule is added.
+ return '3';
}
protected function resolveFuture($path, Future $future) {
@@ -137,6 +124,27 @@
}
}
+
+/* -( Setters )------------------------------------------------------------ */
+
+ public function setDeprecatedFunctions(array $map) {
+ $this->deprecatedFunctions = $map;
+ return $this;
+ }
+
+ public function setDynamicStringClasses(array $map) {
+ $this->dynamicStringClasses = $map;
+ return $this;
+ }
+
+ public function setDynamicStringFunctions(array $map) {
+ $this->dynamicStringFunctions = $map;
+ return $this;
+ }
+
+
+/* -( Linter Rules )------------------------------------------------------- */
+
private function lintUnsafeDynamicString(XHPASTNode $root) {
$safe = $this->dynamicStringFunctions + array(
'pht' => 0,
@@ -206,40 +214,42 @@
}
private function lintArrayCombine(XHPASTNode $root) {
- $function_calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
+ $function_calls = $this->getFunctionCalls($root, array('array_combine'));
+
foreach ($function_calls as $call) {
$name = $call->getChildByIndex(0)->getConcreteString();
- if (strcasecmp($name, 'array_combine') == 0) {
- $parameter_list = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST');
- if (count($parameter_list->getChildren()) !== 2) {
- // Wrong number of parameters, but raise that elsewhere if we want.
- continue;
- }
+ $parameter_list = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST');
- $first = $parameter_list->getChildByIndex(0);
- $second = $parameter_list->getChildByIndex(1);
-
- if ($first->getConcreteString() == $second->getConcreteString()) {
- $this->raiseLintAtNode(
- $call,
- self::LINT_ARRAY_COMBINE,
- pht(
- 'Prior to PHP 5.4, `%s` fails when given empty arrays. '.
- 'Prefer to write `%s` as `%s`.',
- 'array_combine()',
- 'array_combine(x, x)',
- 'array_fuse(x)'));
- }
+ if (count($parameter_list->getChildren()) !== 2) {
+ // Wrong number of parameters, but raise that elsewhere if we want.
+ continue;
+ }
+
+ $first = $parameter_list->getChildByIndex(0);
+ $second = $parameter_list->getChildByIndex(1);
+
+ if ($first->getConcreteString() == $second->getConcreteString()) {
+ $this->raiseLintAtNode(
+ $call,
+ self::LINT_ARRAY_COMBINE,
+ pht(
+ 'Prior to PHP 5.4, `%s` fails when given empty arrays. '.
+ 'Prefer to write `%s` as `%s`.',
+ 'array_combine()',
+ 'array_combine(x, x)',
+ 'array_fuse(x)'));
}
}
}
private function lintDeprecatedFunctions(XHPASTNode $root) {
$map = $this->deprecatedFunctions;
+ $function_calls = $this->getFunctionCalls($root, array_keys($map));
- $function_calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
foreach ($function_calls as $call) {
- $name = $call->getChildByIndex(0)->getConcreteString();
+ $name = $call
+ ->getChildByIndex(0)
+ ->getConcreteString();
$name = strtolower($name);
if (empty($map[$name])) {
diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php
--- a/src/lint/linter/ArcanistXHPASTLinter.php
+++ b/src/lint/linter/ArcanistXHPASTLinter.php
@@ -4298,31 +4298,4 @@
}
}
-
- /**
- * Retrieve all calls to some specified function(s).
- *
- * Returns all descendant nodes which represent a function call to one of the
- * specified functions.
- *
- * @param XHPASTNode Root node.
- * @param list<string> Function names.
- * @return AASTNodeList
- */
- protected function getFunctionCalls(XHPASTNode $root, array $function_names) {
- $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
- $nodes = array();
-
- foreach ($calls as $call) {
- $node = $call->getChildByIndex(0);
- $name = strtolower($node->getConcreteString());
-
- if (in_array($name, $function_names)) {
- $nodes[] = $call;
- }
- }
-
- return AASTNodeList::newFromTreeAndNodes($root->getTree(), $nodes);
- }
-
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 19, 3:35 AM (3 d, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7634293
Default Alt Text
D12472.diff (7 KB)
Attached To
Mode
D12472: Move the getFunctionCalls method to ArcanistBaseXHPASTLinter
Attached
Detach File
Event Timeline
Log In to Comment