Page MenuHomePhabricator

D9195.id21840.diff
No OneTemporary

D9195.id21840.diff

diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php
--- a/src/lint/linter/ArcanistXHPASTLinter.php
+++ b/src/lint/linter/ArcanistXHPASTLinter.php
@@ -45,6 +45,7 @@
const LINT_KEYWORD_CASING = 40;
const LINT_DOUBLE_QUOTE = 41;
const LINT_ELSEIF_USAGE = 42;
+ const LINT_SEMICOLON_SPACING = 43;
private $naminghook;
private $switchhook;
@@ -103,6 +104,7 @@
self::LINT_KEYWORD_CASING => 'Keyword Conventions',
self::LINT_DOUBLE_QUOTE => 'Unnecessary Double Quotes',
self::LINT_ELSEIF_USAGE => 'ElseIf Usage',
+ self::LINT_SEMICOLON_SPACING => 'Semicolon Spacing',
);
}
@@ -138,6 +140,7 @@
self::LINT_KEYWORD_CASING => $warning,
self::LINT_DOUBLE_QUOTE => $advice,
self::LINT_ELSEIF_USAGE => $advice,
+ self::LINT_SEMICOLON_SPACING => $advice,
// This is disabled by default because it implies a very strict policy
// which isn't necessary in the general case.
@@ -253,6 +256,7 @@
'lintKeywordCasing' => self::LINT_KEYWORD_CASING,
'lintStrings' => self::LINT_DOUBLE_QUOTE,
'lintElseIfStatements' => self::LINT_ELSEIF_USAGE,
+ 'lintSemicolons' => self::LINT_SEMICOLON_SPACING,
);
foreach ($method_codes as $method => $codes) {
@@ -2454,6 +2458,22 @@
}
}
+ protected function lintSemicolons(XHPASTNode $root) {
+ $tokens = $root->selectTokensOfType(';');
+
+ foreach ($tokens as $token) {
+ $prev = $token->getPrevToken();
+
+ if ($prev->isAnyWhitespace()) {
+ $this->raiseLintAtToken(
+ $prev,
+ self::LINT_SEMICOLON_SPACING,
+ pht('Space found before semicolon.'),
+ '');
+ }
+ }
+ }
+
public function getSuperGlobalNames() {
return array(
'$GLOBALS',
diff --git a/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test b/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test
@@ -0,0 +1,14 @@
+<?php
+foo();
+bar() ;
+baz()
+
+ ;
+~~~~~~~~~~
+advice:3:6
+advice:4:6
+~~~~~~~~~~
+<?php
+foo();
+bar();
+baz();

File Metadata

Mime Type
text/plain
Expires
Oct 20 2025, 4:04 AM (11 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
11631362
Default Alt Text
D9195.id21840.diff (2 KB)

Event Timeline