Browse Source

Merge branch '2.2'

# Conflicts:
#	src/Tokenizer/Tokens.php
#	tests/Tokenizer/TokensTest.php
Dariusz Ruminski 7 years ago
parent
commit
c9700cfe00
2 changed files with 61 additions and 7 deletions
  1. 23 4
      src/Tokenizer/Tokens.php
  2. 38 3
      tests/Tokenizer/TokensTest.php

+ 23 - 4
src/Tokenizer/Tokens.php

@@ -322,20 +322,39 @@ class Tokens extends \SplFixedArray
      */
     public function ensureWhitespaceAtIndex($index, $indexOffset, $whitespace)
     {
-        $removeLastCommentLine = function (Token $token, $indexOffset) {
+        $removeLastCommentLine = function (Token $token, $indexOffset, $whitespace) {
             if (1 === $indexOffset && $token->isGivenKind(T_OPEN_TAG)) {
-                $token->setContent(rtrim($token->getContent()));
+                if (0 === strpos($whitespace, "\r\n")) {
+                    $token->setContent(rtrim($token->getContent())."\r\n");
+
+                    return strlen($whitespace) > 2 // can be removed on PHP 7; http://php.net/manual/en/function.substr.php
+                        ? substr($whitespace, 2)
+                        : ''
+                    ;
+                }
+
+                $token->setContent(rtrim($token->getContent()).$whitespace[0]);
+
+                return strlen($whitespace) > 1 // can be removed on PHP 7; http://php.net/manual/en/function.substr.php
+                    ? substr($whitespace, 1)
+                    : ''
+                ;
             }
+
+            return $whitespace;
         };
 
         if ($this[$index]->isWhitespace()) {
-            $removeLastCommentLine($this[$index - 1], $indexOffset);
+            $whitespace = $removeLastCommentLine($this[$index - 1], $indexOffset, $whitespace);
             $this->overrideAt($index, [T_WHITESPACE, $whitespace]);
 
             return false;
         }
 
-        $removeLastCommentLine($this[$index], $indexOffset);
+        $whitespace = $removeLastCommentLine($this[$index], $indexOffset, $whitespace);
+        if ('' === $whitespace) {
+            return false;
+        }
 
         $this->insertAt(
             $index + $indexOffset,

+ 38 - 3
tests/Tokenizer/TokensTest.php

@@ -880,22 +880,57 @@ PHP;
     {
         return [
             [
+                '<?php $a. $b;',
+                '<?php $a.$b;',
+                2,
+                1,
+                ' ',
+            ],
+            [
+                '<?php $a .$b;',
+                '<?php $a.$b;',
+                2,
+                0,
+                ' ',
+            ],
+            [
+                "<?php\r\n",
                 '<?php ',
-                '<?php',
                 0,
                 1,
+                "\r\n",
+            ],
+            [
+                '<?php  $a.$b;',
+                '<?php $a.$b;',
+                2,
+                -1,
                 ' ',
             ],
             [
+                "<?php\t   ",
                 "<?php\n",
-                '<?php',
+                0,
+                1,
+                "\t   ",
+            ],
+            [
+                '<?php ',
+                '<?php ',
+                0,
+                1,
+                ' ',
+            ],
+            [
+                "<?php\n",
+                '<?php ',
                 0,
                 1,
                 "\n",
             ],
             [
                 "<?php\t",
-                '<?php',
+                '<?php ',
                 0,
                 1,
                 "\t",