Page MenuHomePhabricator

D13797.id33319.diff
No OneTemporary

D13797.id33319.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -237,6 +237,7 @@
'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 @@
'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
--- a/src/lint/linter/__tests__/xhpast/exit-expression.lint-test
+++ b/src/lint/linter/__tests__/xhpast/exit-expression.lint-test
@@ -4,5 +4,7 @@
strtoupper(33 * exit - 6);
~~~~~~~~~~
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
--- /dev/null
+++ b/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test
@@ -0,0 +1,12 @@
+<?php
+$f = @ fopen($path, 'rb');
+@fclose($f);
+exit ();
+~~~~~~~~~~
+warning:2:7
+warning:4:5
+~~~~~~~~~~
+<?php
+$f = @fopen($path, 'rb');
+@fclose($f);
+exit();
diff --git a/src/lint/linter/xhpast/rules/ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule.php
@@ -0,0 +1,34 @@
+<?php
+
+final class ArcanistUnaryPrefixExpressionSpacingXHPASTLinterRule
+ extends ArcanistXHPASTLinterRule {
+
+ const ID = 73;
+
+ public function getLintName() {
+ return pht('Space After Unary Operator');
+ }
+
+ public function getLintSeverity() {
+ return ArcanistLintSeverity::SEVERITY_WARNING;
+ }
+
+ public function process(XHPASTNode $root) {
+ $expressions = $root->selectDescendantsOfType('n_UNARY_PREFIX_EXPRESSION');
+
+ foreach ($expressions as $expression) {
+ $operator = $expression->getChildOfType(0, 'n_OPERATOR');
+ $operator_value = $operator->getConcreteString();
+ list($before, $after) = $operator->getSurroundingNonsemanticTokens();
+
+ if (!empty($after)) {
+ $this->raiseLintAtOffset(
+ $operator->getOffset() + strlen($operator->getConcreteString()),
+ pht('Unary operators should not be succeeded by whitespace.'),
+ implode('', mpull($after, 'getValue')),
+ '');
+ }
+ }
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 11, 9:20 PM (21 h, 54 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6695784
Default Alt Text
D13797.id33319.diff (3 KB)

Event Timeline