diff --git a/doc/06-config.md b/doc/06-config.md index d89aa062d913..5217b18f225e 100644 --- a/doc/06-config.md +++ b/doc/06-config.md @@ -315,8 +315,8 @@ with other autoloaders. ## autoloader-suffix -Defaults to `null`. String to be used as a suffix for the generated Composer -autoloader. When null a random one will be generated. +Defaults to `null`. Non-empty string to be used as a suffix for the generated +Composer autoloader. When null a random one will be generated. ## optimize-autoloader diff --git a/phpstan/config.neon b/phpstan/config.neon index 457123ae3b44..a2468327f9fc 100644 --- a/phpstan/config.neon +++ b/phpstan/config.neon @@ -16,6 +16,7 @@ parameters: - '../src/Composer/Console/HtmlOutputFormatter.php' reportUnmatchedIgnoredErrors: false + treatPhpDocTypesAsCertain: false ignoreErrors: # unused parameters diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index 265b890d6ba4..87b34659576c 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -159,12 +159,12 @@ public function setPlatformRequirementFilter(PlatformRequirementFilterInterface /** * @param string $targetDir * @param bool $scanPsrPackages - * @param string $suffix + * @param string|null $suffix * @return int * @throws \Seld\JsonLint\ParsingException * @throws \RuntimeException */ - public function dump(Config $config, InstalledRepositoryInterface $localRepo, RootPackageInterface $rootPackage, InstallationManager $installationManager, $targetDir, $scanPsrPackages = false, $suffix = '') + public function dump(Config $config, InstalledRepositoryInterface $localRepo, RootPackageInterface $rootPackage, InstallationManager $installationManager, $targetDir, $scanPsrPackages = false, $suffix = null) { if ($this->classMapAuthoritative) { // Force scanPsrPackages when classmap is authoritative @@ -374,16 +374,23 @@ public static function autoload(\$class) } $classmapFile .= ");\n"; - if (!$suffix) { - if (!$config->get('autoloader-suffix') && Filesystem::isReadable($vendorPath.'/autoload.php')) { + if ('' === $suffix) { + $suffix = null; + } + if (null === $suffix) { + $suffix = $config->get('autoloader-suffix'); + + // carry over existing autoload.php's suffix if possible and none is configured + if (null === $suffix && Filesystem::isReadable($vendorPath.'/autoload.php')) { $content = file_get_contents($vendorPath.'/autoload.php'); if (Preg::isMatch('{ComposerAutoloaderInit([^:\s]+)::}', $content, $match)) { $suffix = $match[1]; } } - if (!$suffix) { - $suffix = $config->get('autoloader-suffix') ?: md5(uniqid('', true)); + // generate one if we still haven't got a suffix + if (null === $suffix) { + $suffix = md5(uniqid('', true)); } } diff --git a/src/Composer/Config.php b/src/Composer/Config.php index 0d927f1903d7..e81c11738572 100644 --- a/src/Composer/Config.php +++ b/src/Composer/Config.php @@ -427,6 +427,13 @@ public function get($key, $flags = 0) return $protos; + case 'autoloader-suffix': + if ($this->config[$key] === '') { // we need to guarantee null or non-empty-string + return null; + } + + return $this->process($this->config[$key], $flags); + default: if (!isset($this->config[$key])) { return null;