Skip to content

Commit

Permalink
NoTrailingWhitespaceFixer - trim space after opening tag
Browse files Browse the repository at this point in the history
  • Loading branch information
kubawerlos authored and keradus committed Aug 10, 2018
1 parent 1c10240 commit e7daf23
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php
Expand Up @@ -62,17 +62,37 @@ public function isCandidate(Tokens $tokens)
*/
protected function applyFix(\SplFileInfo $file, Tokens $tokens)
{
foreach ($tokens as $index => $token) {
for ($index = count($tokens) - 1; $index >= 0; --$index) {
$token = $tokens[$index];
if (
$token->isGivenKind(T_OPEN_TAG)
&& $tokens->offsetExists($index + 1)
&& $tokens[$index + 1]->isWhitespace()
&& 1 === Preg::match('/(.*)\h$/', $token->getContent(), $openTagMatches)
&& 1 === Preg::match('/^(\R)(.*)$/s', $tokens[$index + 1]->getContent(), $whitespaceMatches)
) {
$tokens[$index] = new Token([T_OPEN_TAG, $openTagMatches[1].$whitespaceMatches[1]]);
if ('' === $whitespaceMatches[2]) {
$tokens->clearAt($index + 1);
} else {
$tokens[$index + 1] = new Token([T_WHITESPACE, $whitespaceMatches[2]]);
}

continue;
}

if (!$token->isWhitespace()) {
continue;
}

$lines = Preg::split("/([\r\n]+)/", $token->getContent(), -1, PREG_SPLIT_DELIM_CAPTURE);
$lines = Preg::split('/(\\R+)/', $token->getContent(), -1, PREG_SPLIT_DELIM_CAPTURE);
$linesSize = count($lines);

// fix only multiline whitespaces or singleline whitespaces at the end of file
if ($linesSize > 1 || !isset($tokens[$index + 1])) {
$lines[0] = rtrim($lines[0], " \t");
if (!$tokens[$index - 1]->isGivenKind(T_OPEN_TAG) || 1 !== Preg::match('/(.*)\R$/', $tokens[$index - 1]->getContent())) {
$lines[0] = rtrim($lines[0], " \t");
}

for ($i = 1; $i < $linesSize; ++$i) {
$trimmedLine = rtrim($lines[$i], " \t");
Expand Down
38 changes: 38 additions & 0 deletions tests/Fixer/Whitespace/NoTrailingWhitespaceFixerTest.php
Expand Up @@ -96,6 +96,44 @@ public function provideFixCases()
[
"<?php\necho <<<'EOT'\nInline Il y eut un \r\nrire éclatant \n \n \r\nEOT;\n\n",
],
[
"<?php\necho 'Hello World';",
"<?php \necho 'Hello World';",
],
[
"<?php\n\necho 'Hello World';",
"<?php \n\necho 'Hello World';",
],
[
"<?php\r\necho 'Hello World';",
"<?php \r\necho 'Hello World';",
],
[
"<?php\necho 'Hello World';",
"<?php \necho 'Hello World';",
],
[
"<?php\necho 'Hello World';",
"<?php \necho 'Hello World';",
],
[
'<?php ',
'<?php ',
],
[
"<?php\t",
"<?php\t\t",
],
[
'<?php ', // do not trim this as "<?php" is not valid PHP
],
[
"<?php\n \n \n ",
],
[
"<?php\n \n ",
"<?php \n \n ",
],
];
}
}

0 comments on commit e7daf23

Please sign in to comment.