diff --git a/phpstan.neon b/phpstan.neon index ddf86fd7620..81cfaa11497 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -286,6 +286,7 @@ parameters: message: '#Function "class_exists\(\)" cannot be used/left in the code#' paths: - bin/rector.php + - src/Bootstrap/ExtensionConfigResolver.php - message: '#Do not use static property#' @@ -528,3 +529,13 @@ parameters: path: rules/TypeDeclaration/Rector/ClassMethod/ParamTypeFromStrictTypedPropertyRector.php - '#Method Rector\\Core\\PhpParser\\Node\\BetterNodeFinder\:\:findParentTypes\(\) should return T of PhpParser\\Node\|null but returns class\-string\|T of PhpParser\\Node#' + + - + message: '#Parameter \#1\ $argument of class ReflectionClass constructor expects class-string|Rector\\RectorInstaller\\GeneratedConfig, string given.#' + paths: + - src/Bootstrap/ExtensionConfigResolver.php + + - + message: '#Cognitive complexity for "Rector\\Core\\Bootstrap\\ExtensionConfigResolver\:\:appendExtensionsConfig\(\)" is 13, keep it under 9#' + paths: + - src/Bootstrap/ExtensionConfigResolver.php diff --git a/src/Bootstrap/ExtensionConfigResolver.php b/src/Bootstrap/ExtensionConfigResolver.php new file mode 100644 index 00000000000..c187f4644ae --- /dev/null +++ b/src/Bootstrap/ExtensionConfigResolver.php @@ -0,0 +1,51 @@ +getFileName() === false) { + return $configFileInfos; + } + + $generatedConfigDirectory = dirname($generatedConfigReflection->getFileName()); + foreach (\Rector\RectorInstaller\GeneratedConfig::EXTENSIONS as $name => $extensionConfig) { + foreach ($extensionConfig['extra']['includes'] ?? [] as $includedFile) { + $includedFilePath = null; + if (isset($extensionConfig['relative_install_path'])) { + $includedFilePath = sprintf( + '%s/%s/%s', + $generatedConfigDirectory, + $extensionConfig['relative_install_path'], + $includedFile + ); + if (! file_exists($includedFilePath) || ! is_readable($includedFilePath)) { + $includedFilePath = null; + } + } + + if ($includedFilePath === null) { + $includedFilePath = sprintf('%s/%s', $extensionConfig['install_path'], $includedFile); + } + $configFileInfos[] = new SmartFileInfo($includedFilePath); + } + } + + return $configFileInfos; + } +} diff --git a/src/Bootstrap/RectorConfigsResolver.php b/src/Bootstrap/RectorConfigsResolver.php index 18f10f45326..3b01a59a82d 100644 --- a/src/Bootstrap/RectorConfigsResolver.php +++ b/src/Bootstrap/RectorConfigsResolver.php @@ -26,10 +26,16 @@ final class RectorConfigsResolver */ private $setConfigResolver; + /** + * @var ExtensionConfigResolver + */ + private $extensionConfigResolver; + public function __construct() { $this->setConfigResolver = new SetConfigResolver(); $this->configResolver = new ConfigResolver(); + $this->extensionConfigResolver = new ExtensionConfigResolver(); } /** @@ -64,6 +70,7 @@ public function provide(): BootstrapConfigs ) : []; $configFileInfos = $this->appendRectorRecipeConfig($argvInput, $configFileInfos); + $configFileInfos = $this->extensionConfigResolver->appendExtensionsConfig($configFileInfos); return new BootstrapConfigs($mainConfigFileInfo, $configFileInfos); }