From b9e96e7f46963971ef846347122cf9ece797f64c Mon Sep 17 00:00:00 2001 From: Sebastian Schreiber Date: Thu, 13 May 2021 02:22:27 +0200 Subject: [PATCH] [TASK] Add RenamePackageComposerRector (#27) --- .../Fixture/remove_package.json | 17 ++++ .../RenamePackageComposerRectorTest.php | 33 ++++++++ .../config/some_config.php | 21 +++++ .../Rector/RenamePackageComposerRector.php | 83 +++++++++++++++++++ rules/Composer/ValueObject/RenamePackage.php | 28 +++++++ 5 files changed, 182 insertions(+) create mode 100644 rules-tests/Composer/Rector/RenamePackageComposerRector/Fixture/remove_package.json create mode 100644 rules-tests/Composer/Rector/RenamePackageComposerRector/RenamePackageComposerRectorTest.php create mode 100644 rules-tests/Composer/Rector/RenamePackageComposerRector/config/some_config.php create mode 100644 rules/Composer/Rector/RenamePackageComposerRector.php create mode 100644 rules/Composer/ValueObject/RenamePackage.php diff --git a/rules-tests/Composer/Rector/RenamePackageComposerRector/Fixture/remove_package.json b/rules-tests/Composer/Rector/RenamePackageComposerRector/Fixture/remove_package.json new file mode 100644 index 00000000000..331ddebaa94 --- /dev/null +++ b/rules-tests/Composer/Rector/RenamePackageComposerRector/Fixture/remove_package.json @@ -0,0 +1,17 @@ +{ + "require": { + "foo/bar": "dev-main" + }, + "require-dev": { + "foo/baz": "dev-main" + } +} +----- +{ + "require": { + "baz/bar": "dev-main" + }, + "require-dev": { + "baz/baz": "dev-main" + } +} diff --git a/rules-tests/Composer/Rector/RenamePackageComposerRector/RenamePackageComposerRectorTest.php b/rules-tests/Composer/Rector/RenamePackageComposerRector/RenamePackageComposerRectorTest.php new file mode 100644 index 00000000000..70be1ca171e --- /dev/null +++ b/rules-tests/Composer/Rector/RenamePackageComposerRector/RenamePackageComposerRectorTest.php @@ -0,0 +1,33 @@ +doTestFileInfo($fileInfo); + } + + /** + * @return Iterator + */ + public function provideData(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture', '*.json'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/some_config.php'; + } +} diff --git a/rules-tests/Composer/Rector/RenamePackageComposerRector/config/some_config.php b/rules-tests/Composer/Rector/RenamePackageComposerRector/config/some_config.php new file mode 100644 index 00000000000..4eda7d1db4a --- /dev/null +++ b/rules-tests/Composer/Rector/RenamePackageComposerRector/config/some_config.php @@ -0,0 +1,21 @@ +services(); + $services->set(RenamePackageComposerRector::class) + ->call('configure', [ + [ + RenamePackageComposerRector::RENAME_PACKAGES => + ValueObjectInliner::inline( + [new RenamePackage('foo/bar', 'baz/bar'), new RenamePackage('foo/baz', 'baz/baz')] + ), + ], + ]); +}; diff --git a/rules/Composer/Rector/RenamePackageComposerRector.php b/rules/Composer/Rector/RenamePackageComposerRector.php new file mode 100644 index 00000000000..1a813a0f57c --- /dev/null +++ b/rules/Composer/Rector/RenamePackageComposerRector.php @@ -0,0 +1,83 @@ +renamePackages as $renamePackage) { + if ($composerJson->hasRequiredPackage($renamePackage->getOldPackageName())) { + $version = $composerJson->getRequire()[$renamePackage->getOldPackageName()]; + $composerJson->replacePackage( + $renamePackage->getOldPackageName(), + $renamePackage->getNewPackageName(), + $version + ); + } + if ($composerJson->hasRequiredDevPackage($renamePackage->getOldPackageName())) { + $version = $composerJson->getRequireDev()[$renamePackage->getOldPackageName()]; + $composerJson->replacePackage( + $renamePackage->getOldPackageName(), + $renamePackage->getNewPackageName(), + $version + ); + } + } + } + + public function getRuleDefinition(): RuleDefinition + { + return new RuleDefinition('Change package name in `composer.json`', [new ConfiguredCodeSample( + <<<'CODE_SAMPLE' +{ + "require": { + "rector/rector": "dev-main" + } +} +CODE_SAMPLE + , + <<<'CODE_SAMPLE' +{ + "require": { + "rector/rector-src": "dev-main" + } +} +CODE_SAMPLE + , + [ + self::RENAME_PACKAGES => [new RenamePackage('rector/rector', 'rector/rector-src')], + ] + ), + ]); + } + + /** + * @param array $configuration + */ + public function configure(array $configuration): void + { + $this->renamePackages = $configuration[self::RENAME_PACKAGES] ?? []; + } +} diff --git a/rules/Composer/ValueObject/RenamePackage.php b/rules/Composer/ValueObject/RenamePackage.php new file mode 100644 index 00000000000..b00cfcd9d53 --- /dev/null +++ b/rules/Composer/ValueObject/RenamePackage.php @@ -0,0 +1,28 @@ +oldPackageName = $oldPackageName; + $this->newPackageName = $newPackageName; + } + + public function getOldPackageName(): string + { + return $this->oldPackageName; + } + + public function getNewPackageName(): string + { + return $this->newPackageName; + } +}