mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-08 16:02:39 +01:00
Added ArcanistTextLinter::LINT_BOF_WHITESPACE
and ArcanistTextLinter::LINT_EOF_WHITESPACE
Summary: This might not be universally desireable, but I found myself writing an additional linter (which I had called `WhitespaceTextLinter`) for the sake of these two linter tests. I figured it may be of use upstream, and so I decided to submit it as a diff. I won't be offended if it is rejected however. Test Plan: `arc lint` and `arc unit` are both okay with it. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley CC: Korvin, epriestley, aran Differential Revision: https://secure.phabricator.com/D7957
This commit is contained in:
parent
dd12b72f9a
commit
d62bd48a81
11 changed files with 77 additions and 10 deletions
|
@ -20,4 +20,3 @@
|
||||||
["DivinerXHPEngine", {}]
|
["DivinerXHPEngine", {}]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
@echo off
|
@echo off
|
||||||
php -f "%~dp0..\scripts\arcanist.php" -- %*
|
php -f "%~dp0..\scripts\arcanist.php" -- %*
|
||||||
|
|
||||||
|
|
|
@ -624,4 +624,3 @@ function reenter_if_this_is_arcanist_or_libphutil(
|
||||||
|
|
||||||
exit($err);
|
exit($err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,5 +57,3 @@ abstract class ArcanistLicenseLinter extends ArcanistLinter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
const LINT_BAD_CHARSET = 5;
|
const LINT_BAD_CHARSET = 5;
|
||||||
const LINT_TRAILING_WHITESPACE = 6;
|
const LINT_TRAILING_WHITESPACE = 6;
|
||||||
const LINT_NO_COMMIT = 7;
|
const LINT_NO_COMMIT = 7;
|
||||||
|
const LINT_BOF_WHITESPACE = 8;
|
||||||
|
const LINT_EOF_WHITESPACE = 9;
|
||||||
|
|
||||||
private $maxLineLength = 80;
|
private $maxLineLength = 80;
|
||||||
|
|
||||||
|
@ -38,6 +40,8 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
return array(
|
return array(
|
||||||
self::LINT_LINE_WRAP => ArcanistLintSeverity::SEVERITY_WARNING,
|
self::LINT_LINE_WRAP => ArcanistLintSeverity::SEVERITY_WARNING,
|
||||||
self::LINT_TRAILING_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
|
self::LINT_TRAILING_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
|
||||||
|
self::LINT_BOF_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
|
||||||
|
self::LINT_EOF_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +54,8 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
self::LINT_BAD_CHARSET => pht('Bad Charset'),
|
self::LINT_BAD_CHARSET => pht('Bad Charset'),
|
||||||
self::LINT_TRAILING_WHITESPACE => pht('Trailing Whitespace'),
|
self::LINT_TRAILING_WHITESPACE => pht('Trailing Whitespace'),
|
||||||
self::LINT_NO_COMMIT => pht('Explicit %s', '@no'.'commit'),
|
self::LINT_NO_COMMIT => pht('Explicit %s', '@no'.'commit'),
|
||||||
|
self::LINT_BOF_WHITESPACE => pht('Leading Whitespace at BOF'),
|
||||||
|
self::LINT_EOF_WHITESPACE => pht('Trailing Whitespace at EOF'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +83,9 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
$this->lintEOFNewline($path);
|
$this->lintEOFNewline($path);
|
||||||
$this->lintTrailingWhitespace($path);
|
$this->lintTrailingWhitespace($path);
|
||||||
|
|
||||||
|
$this->lintBOFWhitespace($path);
|
||||||
|
$this->lintEOFWhitespace($path);
|
||||||
|
|
||||||
if ($this->getEngine()->getCommitHookMode()) {
|
if ($this->getEngine()->getCommitHookMode()) {
|
||||||
$this->lintNoCommit($path);
|
$this->lintNoCommit($path);
|
||||||
}
|
}
|
||||||
|
@ -194,6 +203,54 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function lintBOFWhitespace($path) {
|
||||||
|
$data = $this->getData($path);
|
||||||
|
|
||||||
|
$matches = null;
|
||||||
|
$preg = preg_match(
|
||||||
|
'/^\s*\n/',
|
||||||
|
$data,
|
||||||
|
$matches,
|
||||||
|
PREG_OFFSET_CAPTURE);
|
||||||
|
|
||||||
|
if (!$preg) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
list($string, $offset) = $matches[0];
|
||||||
|
$this->raiseLintAtOffset(
|
||||||
|
$offset,
|
||||||
|
self::LINT_BOF_WHITESPACE,
|
||||||
|
'This file contains leading whitespace at the beginning of the file. ' .
|
||||||
|
'This is unnecessary and should be avoided when possible.',
|
||||||
|
$string,
|
||||||
|
'');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function lintEOFWhitespace($path) {
|
||||||
|
$data = $this->getData($path);
|
||||||
|
|
||||||
|
$matches = null;
|
||||||
|
$preg = preg_match(
|
||||||
|
'/(?<=\n)\s+$/',
|
||||||
|
$data,
|
||||||
|
$matches,
|
||||||
|
PREG_OFFSET_CAPTURE);
|
||||||
|
|
||||||
|
if (!$preg) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
list($string, $offset) = $matches[0];
|
||||||
|
$this->raiseLintAtOffset(
|
||||||
|
$offset,
|
||||||
|
self::LINT_EOF_WHITESPACE,
|
||||||
|
'This file contains trailing whitespace at the end of the file. This ' .
|
||||||
|
'is unnecessary and should be avoided when possible.',
|
||||||
|
$string,
|
||||||
|
'');
|
||||||
|
}
|
||||||
|
|
||||||
private function lintNoCommit($path) {
|
private function lintNoCommit($path) {
|
||||||
$data = $this->getData($path);
|
$data = $this->getData($path);
|
||||||
|
|
||||||
|
@ -210,5 +267,4 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The quick brown fox jumps over the lazy dog.
|
||||||
|
~~~~~~~~~~
|
||||||
|
autofix:1:1
|
||||||
|
~~~~~~~~~~
|
||||||
|
The quick brown fox jumps over the lazy dog.
|
|
@ -0,0 +1,2 @@
|
||||||
|
The quick brown fox jumps over the lazy dog.
|
||||||
|
~~~~~~~~~~
|
9
src/lint/linter/__tests__/text/eof-whitespace.lint-test
Normal file
9
src/lint/linter/__tests__/text/eof-whitespace.lint-test
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
The quick brown fox jumps over the lazy dog.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
~~~~~~~~~~
|
||||||
|
autofix:2:1
|
||||||
|
~~~~~~~~~~
|
||||||
|
The quick brown fox jumps over the lazy dog.
|
|
@ -284,5 +284,3 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
return $reports;
|
return $reports;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -181,4 +181,3 @@ EOTEXT
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,4 +35,3 @@ EOTEXT
|
||||||
$console->writeOut("Please use arc backout instead.\n");
|
$console->writeOut("Please use arc backout instead.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue