diff --git a/src/lint/linter/__tests__/phlxhp/array-formatting.lint-test b/src/lint/linter/__tests__/phlxhp/array-formatting.lint-test new file mode 100644 --- /dev/null +++ b/src/lint/linter/__tests__/phlxhp/array-formatting.lint-test @@ -0,0 +1,16 @@ +selectDescendantsOfTypes(array( + $nodes = $root->selectDescendantsOfTypes(array( + 'n_ARRAY_LITERAL', 'n_FUNCTION_CALL', 'n_METHOD_CALL', + 'n_LIST', )); - foreach ($calls as $call) { - $params = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); + foreach ($nodes as $node) { + switch ($node->getTypeName()) { + case 'n_ARRAY_LITERAL': + $params = $node->getChildOfType(0, 'n_ARRAY_VALUE_LIST'); + break; + + case 'n_FUNCTION_CALL': + case 'n_METHOD_CALL': + $params = $node->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); + break; + + case 'n_LIST': + $params = $node->getChildOfType(0, 'n_ASSIGNMENT_LIST'); + break; + + default: + throw new Exception( + pht("Unexpected node of type '%s'!", $node->getTypeName())); + } + $tokens = $params->getTokens(); $first = head($tokens); @@ -29,17 +49,13 @@ if (preg_match('/^\s+$/', $leading_text)) { $this->raiseLintAtOffset( $first->getOffset() - strlen($leading_text), - pht('Convention: no spaces before opening parenthesis in calls.'), + pht('Convention: no spaces before opening parentheses.'), $leading_text, ''); } - } - foreach ($calls as $call) { // If the last parameter of a call is a HEREDOC, don't apply this rule. - $params = $call - ->getChildOfType(1, 'n_CALL_PARAMETER_LIST') - ->getChildren(); + $params = $params->getChildren(); if ($params) { $last_param = last($params); @@ -48,15 +64,19 @@ } } - $tokens = $call->getTokens(); + $tokens = $node->getTokens(); $last = array_pop($tokens); + if ($node->getTypeName() == 'n_ARRAY_LITERAL') { + continue; + } + $trailing = $last->getNonsemanticTokensBefore(); $trailing_text = implode('', mpull($trailing, 'getValue')); if (preg_match('/^\s+$/', $trailing_text)) { $this->raiseLintAtOffset( $last->getOffset() - strlen($trailing_text), - pht('Convention: no spaces before closing parenthesis in calls.'), + pht('Convention: no spaces before closing parentheses.'), $trailing_text, ''); } diff --git a/src/lint/linter/xhpast/rules/ArcanistParenthesesSpacingXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistParenthesesSpacingXHPASTLinterRule.php --- a/src/lint/linter/xhpast/rules/ArcanistParenthesesSpacingXHPASTLinterRule.php +++ b/src/lint/linter/xhpast/rules/ArcanistParenthesesSpacingXHPASTLinterRule.php @@ -15,11 +15,13 @@ public function process(XHPASTNode $root) { $all_paren_groups = $root->selectDescendantsOfTypes(array( + 'n_ARRAY_VALUE_LIST', + 'n_ASSIGNMENT_LIST', 'n_CALL_PARAMETER_LIST', + 'n_DECLARATION_PARAMETER_LIST', 'n_CONTROL_CONDITION', 'n_FOR_EXPRESSION', 'n_FOREACH_EXPRESSION', - 'n_DECLARATION_PARAMETER_LIST', )); foreach ($all_paren_groups as $group) { diff --git a/src/unit/engine/ArcanistConfigurationDrivenUnitTestEngine.php b/src/unit/engine/ArcanistConfigurationDrivenUnitTestEngine.php --- a/src/unit/engine/ArcanistConfigurationDrivenUnitTestEngine.php +++ b/src/unit/engine/ArcanistConfigurationDrivenUnitTestEngine.php @@ -97,14 +97,17 @@ $ex); } - $include = (array)idx($spec, 'include', array()); - $exclude = (array)idx($spec, 'exclude', array()); - $paths = $this->matchPaths( - $all_paths, - $include, - $exclude); - - $test_engine->setPaths($paths); + if ($all_paths) { + $include = (array)idx($spec, 'include', array()); + $exclude = (array)idx($spec, 'exclude', array()); + $paths = $this->matchPaths( + $all_paths, + $include, + $exclude); + + $test_engine->setPaths($paths); + } + $built_test_engines[] = $test_engine; }