diff --git a/src/Configuration/RectorConfigBuilder.php b/src/Configuration/RectorConfigBuilder.php index a3eca69a08c..28cd72ac34f 100644 --- a/src/Configuration/RectorConfigBuilder.php +++ b/src/Configuration/RectorConfigBuilder.php @@ -47,6 +47,7 @@ /** * @api + * @see \Rector\Tests\Configuration\RectorConfigBuilderTest */ final class RectorConfigBuilder { @@ -65,6 +66,11 @@ final class RectorConfigBuilder */ private array $sets = []; + /** + * @var string[] + */ + private array $imports = []; + /** * @var array */ @@ -195,6 +201,10 @@ final class RectorConfigBuilder public function __invoke(RectorConfig $rectorConfig): void { + foreach ($this->imports as $import) { + $rectorConfig->import($import); + } + if ($this->setGroups !== [] || $this->setProviders !== []) { $setProviderCollector = new SetProviderCollector(array_map( $rectorConfig->make(...), @@ -407,6 +417,16 @@ public function withPaths(array $paths): self return $this; } + /** + * @param string ...$files file paths to import + */ + public function withImport(string ...$files): self + { + $this->imports = array_merge($this->imports, $files); + + return $this; + } + /** * @param array $skip */ diff --git a/tests/Configuration/RectorConfigBuilderTest.php b/tests/Configuration/RectorConfigBuilderTest.php new file mode 100644 index 00000000000..2268209286c --- /dev/null +++ b/tests/Configuration/RectorConfigBuilderTest.php @@ -0,0 +1,48 @@ +configure() + ->withImport(__DIR__ . '/config/imported_config.php')($rectorConfig); + + $this->assertTrue($rectorConfig->has(ReturnTypeFromReturnNewRector::class)); + } + + public function testWithMultipleImports(): void + { + $rectorConfig = self::getContainer(); + + $rectorConfig->configure() + ->withImport( + __DIR__ . '/config/imported_config.php', + __DIR__ . '/config/second_imported_config.php' + )($rectorConfig); + + $this->assertTrue($rectorConfig->has(ReturnTypeFromReturnNewRector::class)); + $this->assertTrue($rectorConfig->has(RemoveUnusedPrivateMethodRector::class)); + } + + public function testWithNestedImport(): void + { + $rectorConfig = self::getContainer(); + + $rectorConfig->configure() + ->withImport(__DIR__ . '/config/nested_import_config.php')($rectorConfig); + + $this->assertTrue($rectorConfig->has(ReturnTypeFromReturnNewRector::class)); + } +} diff --git a/tests/Configuration/config/imported_config.php b/tests/Configuration/config/imported_config.php new file mode 100644 index 00000000000..7ce83a6666e --- /dev/null +++ b/tests/Configuration/config/imported_config.php @@ -0,0 +1,9 @@ +withRules([ReturnTypeFromReturnNewRector::class]); diff --git a/tests/Configuration/config/nested_import_config.php b/tests/Configuration/config/nested_import_config.php new file mode 100644 index 00000000000..9afe7a982b8 --- /dev/null +++ b/tests/Configuration/config/nested_import_config.php @@ -0,0 +1,8 @@ +withImport(__DIR__ . '/imported_config.php'); diff --git a/tests/Configuration/config/second_imported_config.php b/tests/Configuration/config/second_imported_config.php new file mode 100644 index 00000000000..0f4bf63e864 --- /dev/null +++ b/tests/Configuration/config/second_imported_config.php @@ -0,0 +1,9 @@ +withRules([RemoveUnusedPrivateMethodRector::class]);