Jordi Boggiano 13 жил өмнө
parent
commit
4b24b972a7

+ 12 - 4
src/Composer/Compiler.php

@@ -104,7 +104,7 @@ class Compiler
 
         $content = file_get_contents($file);
         if ($strip) {
-            $content = $this->stripComments($content);
+            $content = $this->stripWhitespace($content);
         } elseif ('LICENSE' === basename($file)) {
             $content = "\n".$content."\n";
         }
@@ -122,12 +122,12 @@ class Compiler
     }
 
     /**
-     * Removes comments from a PHP source string.
+     * Removes whitespace from a PHP source string while preserving line numbers.
      *
      * @param string $source A PHP string
-     * @return string The PHP string with the comments removed
+     * @return string The PHP string with the whitespace removed
      */
-    private function stripComments($source)
+    private function stripWhitespace($source)
     {
         if (!function_exists('token_get_all')) {
             return $source;
@@ -139,6 +139,14 @@ class Compiler
                 $output .= $token;
             } elseif (in_array($token[0], array(T_COMMENT, T_DOC_COMMENT))) {
                 $output .= str_repeat("\n", substr_count($token[1], "\n"));
+            } elseif (T_WHITESPACE === $token[0]) {
+                // reduce wide spaces
+                $whitespace = preg_replace('{[ \t]+}', ' ', $token[1]);
+                // normalize newlines to \n
+                $whitespace = preg_replace('{(?:\r\n|\r|\n)}', "\n", $whitespace);
+                // trim leading spaces
+                $whitespace = preg_replace('{\n +}', "\n", $whitespace);
+                $output .= $whitespace;
             } else {
                 $output .= $token[1];
             }