Page MenuHomePhabricator

D12418.diff
No OneTemporary

D12418.diff

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
@@ -59,6 +59,7 @@
const LINT_SELF_MEMBER_REFERENCE = 57;
const LINT_LOGICAL_OPERATORS = 58;
const LINT_INNER_FUNCTION = 59;
+ const LINT_DEFAULT_PARAMETERS = 60;
private $blacklistedFunctions = array();
private $naminghook;
@@ -185,6 +186,8 @@
=> pht('Logical Operators'),
self::LINT_INNER_FUNCTION
=> pht('Inner Functions'),
+ self::LINT_DEFAULT_PARAMETERS
+ => pht('Default Parameters'),
);
}
@@ -232,6 +235,7 @@
self::LINT_SELF_MEMBER_REFERENCE => $advice,
self::LINT_LOGICAL_OPERATORS => $advice,
self::LINT_INNER_FUNCTION => $warning,
+ self::LINT_DEFAULT_PARAMETERS => $warning,
);
}
@@ -299,7 +303,7 @@
public function getVersion() {
// The version number should be incremented whenever a new rule is added.
- return '22';
+ return '23';
}
protected function resolveFuture($path, Future $future) {
@@ -385,6 +389,7 @@
'lintSelfMemberReference' => self::LINT_SELF_MEMBER_REFERENCE,
'lintLogicalOperators' => self::LINT_LOGICAL_OPERATORS,
'lintInnerFunctions' => self::LINT_INNER_FUNCTION,
+ 'lintDefaultParameters' => self::LINT_DEFAULT_PARAMETERS,
);
foreach ($method_codes as $method => $codes) {
@@ -3650,6 +3655,32 @@
}
}
+ private function lintDefaultParameters(XHPASTNode $root) {
+ $parameter_lists = $root->selectDescendantsOfType(
+ 'n_DECLARATION_PARAMETER_LIST');
+
+ foreach ($parameter_lists as $parameter_list) {
+ $default_found = false;
+ $parameters = $parameter_list->selectDescendantsOfType(
+ 'n_DECLARATION_PARAMETER');
+
+ foreach ($parameters as $parameter) {
+ $default_value = $parameter->getChildByIndex(2);
+
+ if ($default_value->getTypeName() != 'n_EMPTY') {
+ $default_found = true;
+ } else if ($default_found) {
+ $this->raiseLintAtNode(
+ $parameter_list,
+ self::LINT_DEFAULT_PARAMETERS,
+ pht(
+ 'Arguments with default values must be at the end '.
+ 'of the argument list.'));
+ }
+ }
+ }
+ }
+
/**
* Retrieve all calls to some specified function(s).
*
diff --git a/src/lint/linter/__tests__/xhpast/default-parameters.lint-test b/src/lint/linter/__tests__/xhpast/default-parameters.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/__tests__/xhpast/default-parameters.lint-test
@@ -0,0 +1,12 @@
+<?php
+function foo($x, $y, $z) {}
+function bar($x, $y = null, $z) {}
+function baz($x = null, $y = null, $z = null) {}
+
+class MyClass {
+ public function myMethod($x, $y = null, $z) {}
+}
+~~~~~~~~~~
+warning:3:13
+error:6:7
+warning:7:27
diff --git a/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test b/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test
--- a/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test
+++ b/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test
@@ -71,9 +71,9 @@
Q &$c,
Q $d = null,
Q &$e = null,
- $f,
+ $f = null,
$g = null,
- &$h,
+ &$h = null,
&$i = null) {
$a++;
$b++;

File Metadata

Mime Type
text/plain
Expires
Fri, May 10, 7:00 PM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6283961
Default Alt Text
D12418.diff (3 KB)

Event Timeline