Page MenuHomePhabricator

D13798.diff
No OneTemporary

D13798.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
@@ -171,6 +171,7 @@
'ArcanistNoLintLinterTestCase' => 'lint/linter/__tests__/ArcanistNoLintLinterTestCase.php',
'ArcanistNoParentScopeXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistNoParentScopeXHPASTLinterRule.php',
'ArcanistNoneLintRenderer' => 'lint/renderer/ArcanistNoneLintRenderer.php',
+ 'ArcanistObjectOperatorSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistObjectOperatorSpacingXHPASTLinterRule.php',
'ArcanistPEP8Linter' => 'lint/linter/ArcanistPEP8Linter.php',
'ArcanistPEP8LinterTestCase' => 'lint/linter/__tests__/ArcanistPEP8LinterTestCase.php',
'ArcanistPHPCloseTagXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistPHPCloseTagXHPASTLinterRule.php',
@@ -445,6 +446,7 @@
'ArcanistNoLintLinterTestCase' => 'ArcanistLinterTestCase',
'ArcanistNoParentScopeXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistNoneLintRenderer' => 'ArcanistLintRenderer',
+ 'ArcanistObjectOperatorSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistPEP8Linter' => 'ArcanistExternalLinter',
'ArcanistPEP8LinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistPHPCloseTagXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
diff --git a/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test b/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test
@@ -0,0 +1,12 @@
+<?php
+$x -> doSomething();
+id(new Something())
+ ->doSomething();
+~~~~~~~~~~
+warning:2:3
+warning:2:6
+~~~~~~~~~~
+<?php
+$x->doSomething();
+id(new Something())
+ ->doSomething();
diff --git a/src/lint/linter/xhpast/rules/ArcanistObjectOperatorSpacingXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistObjectOperatorSpacingXHPASTLinterRule.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/ArcanistObjectOperatorSpacingXHPASTLinterRule.php
@@ -0,0 +1,47 @@
+<?php
+
+final class ArcanistObjectOperatorSpacingXHPASTLinterRule
+ extends ArcanistXHPASTLinterRule {
+
+ const ID = 74;
+
+ public function getLintName() {
+ return pht('Object Operator Spacing');
+ }
+
+ public function getLintSeverity() {
+ return ArcanistLintSeverity::SEVERITY_WARNING;
+ }
+
+ public function process(XHPASTNode $root) {
+ $operators = $root->selectTokensOfType('T_OBJECT_OPERATOR');
+
+ foreach ($operators as $operator) {
+ $before = $operator->getNonsemanticTokensBefore();
+ $after = $operator->getNonsemanticTokensAfter();
+
+ if ($before) {
+ $value = implode('', mpull($before, 'getValue'));
+
+ if (strpos($value, "\n") !== false) {
+ continue;
+ }
+
+ $this->raiseLintAtOffset(
+ head($before)->getOffset(),
+ pht('There should be no whitespace before the object operator.'),
+ $value,
+ '');
+ }
+
+ if ($after) {
+ $this->raiseLintAtOffset(
+ head($after)->getOffset(),
+ pht('There should be no whitespace after the object operator.'),
+ implode('', mpull($before, 'getValue')),
+ '');
+ }
+ }
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 11, 7:24 PM (21 h, 55 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6695553
Default Alt Text
D13798.diff (3 KB)

Event Timeline