diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 49ccb0d8..64dc1a44 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -237,6 +237,7 @@ phutil_register_library_map(array( 'ArcanistTodoWorkflow' => 'workflow/ArcanistTodoWorkflow.php', 'ArcanistUSEnglishTranslation' => 'internationalization/ArcanistUSEnglishTranslation.php', 'ArcanistUnableToParseXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistUnableToParseXHPASTLinterRule.php', + 'ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule.php', 'ArcanistUndeclaredVariableXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistUndeclaredVariableXHPASTLinterRule.php', 'ArcanistUnitConsoleRenderer' => 'unit/renderer/ArcanistUnitConsoleRenderer.php', 'ArcanistUnitRenderer' => 'unit/renderer/ArcanistUnitRenderer.php', @@ -510,6 +511,7 @@ phutil_register_library_map(array( 'ArcanistTodoWorkflow' => 'ArcanistWorkflow', 'ArcanistUSEnglishTranslation' => 'PhutilTranslation', 'ArcanistUnableToParseXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', + 'ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', 'ArcanistUndeclaredVariableXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', 'ArcanistUnitConsoleRenderer' => 'ArcanistUnitRenderer', 'ArcanistUnitRenderer' => 'Phobject', diff --git a/src/lint/linter/__tests__/xhpast/exit-expression.lint-test b/src/lint/linter/__tests__/xhpast/exit-expression.lint-test index 96fbeb6f..c9724096 100644 --- a/src/lint/linter/__tests__/xhpast/exit-expression.lint-test +++ b/src/lint/linter/__tests__/xhpast/exit-expression.lint-test @@ -2,7 +2,14 @@ exit(-1); exit -1; strtoupper(33 * exit - 6); +echo ''; +print ''; + +$x = new stdClass(); +$y = clone $x; ~~~~~~~~~~ error:3:1 +warning:3:5 warning:3:6 error:4:17 +warning:4:21 diff --git a/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test b/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test new file mode 100644 index 00000000..87b65c64 --- /dev/null +++ b/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test @@ -0,0 +1,12 @@ +selectDescendantsOfType('n_UNARY_PREFIX_EXPRESSION'); + + foreach ($expressions as $expression) { + $operator = $expression->getChildOfType(0, 'n_OPERATOR'); + $operator_value = $operator->getConcreteString(); + list($before, $after) = $operator->getSurroundingNonsemanticTokens(); + + switch (strtolower($operator_value)) { + case 'clone': + case 'echo': + case 'print': + break; + + default: + if (!empty($after)) { + $this->raiseLintAtOffset( + $operator->getOffset() + strlen($operator->getConcreteString()), + pht('Unary operators should not be followed by whitespace.'), + implode('', mpull($after, 'getValue')), + ''); + } + break; + } + } + } + +}