diff --git a/src/Composer/Compiler.php b/src/Composer/Compiler.php index 3d3401a26..e6af59826 100644 --- a/src/Composer/Compiler.php +++ b/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]; }