Differential D17825 Diff 42870 src/lint/linter/xhpast/rules/ArcanistDefaultParametersXHPASTLinterRule.php
Changeset View
Changeset View
Standalone View
Standalone View
src/lint/linter/xhpast/rules/ArcanistDefaultParametersXHPASTLinterRule.php
| Show All 18 Lines | public function process(XHPASTNode $root) { | ||||
| foreach ($parameter_lists as $parameter_list) { | foreach ($parameter_lists as $parameter_list) { | ||||
| $default_found = false; | $default_found = false; | ||||
| $parameters = $parameter_list->selectDescendantsOfType( | $parameters = $parameter_list->selectDescendantsOfType( | ||||
| 'n_DECLARATION_PARAMETER'); | 'n_DECLARATION_PARAMETER'); | ||||
| foreach ($parameters as $parameter) { | foreach ($parameters as $parameter) { | ||||
| $default_value = $parameter->getChildByIndex(2); | $default_value = $parameter->getChildByIndex(2); | ||||
| $is_variadic_argument = | |||||
| $parameter->getChildByIndex(1)->getTypeName() === 'n_UNPACK'; | |||||
| if ($default_value->getTypeName() != 'n_EMPTY') { | if ($default_value->getTypeName() != 'n_EMPTY') { | ||||
| $default_found = true; | $default_found = true; | ||||
| } else if ($default_found) { | } else if (!$is_variadic_argument && $default_found) { | ||||
| $this->raiseLintAtNode( | $this->raiseLintAtNode( | ||||
| $parameter_list, | $parameter_list, | ||||
| pht( | pht( | ||||
| 'Arguments with default values must be at the end '. | 'Arguments with default values must be at the end '. | ||||
| 'of the argument list.')); | 'of the argument list.')); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||