From 4e9ab470de6f4abe3a9c2d4d8d0e9619212873f6 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 16 Nov 2019 16:36:58 +0100 Subject: [PATCH] [PHP Deglobalize] Add ChangeGlobalVariablesToPropertiesRector --- docs/AllRectorsOverview.md | 13 +++- ...acesToContractNamespaceDirectoryRector.php | 2 + ...oveEntitiesToEntityDirectoryRectorTest.php | 2 +- .../Source/Entity/Fixture/RandomEntity.php | 15 ++++ .../Contract/Fixture/RandomInterface.php | 10 +++ ...eServicesBySuffixToDirectoryRectorTest.php | 2 +- .../Source/Command/Fixture/BananaCommand.php | 11 +++ .../Repository/Fixture/AppleRepository.php | 10 +++ packages/FileSystemRector/config/config.yaml | 3 + .../src/Configuration/Option.php | 13 ++++ .../src/Rector/AbstractFileSystemRector.php | 10 ++- .../Removing/RemoveProjectFileRector.php | 76 +++++++++++++++++++ .../AbstractFileSystemRectorTestCase.php | 8 ++ ...ltipleClassFileToPsr4ClassesRectorTest.php | 4 +- 14 files changed, 173 insertions(+), 6 deletions(-) create mode 100644 packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/Source/Entity/Fixture/RandomEntity.php create mode 100644 packages/Autodiscovery/tests/Rector/FileSystem/MoveInterfacesToContractNamespaceDirectoryRector/Source/Contract/Fixture/RandomInterface.php create mode 100644 packages/Autodiscovery/tests/Rector/FileSystem/MoveServicesBySuffixToDirectoryRector/Source/Command/Fixture/BananaCommand.php create mode 100644 packages/Autodiscovery/tests/Rector/FileSystem/MoveServicesBySuffixToDirectoryRector/Source/Repository/Fixture/AppleRepository.php create mode 100644 packages/FileSystemRector/src/Configuration/Option.php create mode 100644 packages/FileSystemRector/src/Rector/Removing/RemoveProjectFileRector.php diff --git a/docs/AllRectorsOverview.md b/docs/AllRectorsOverview.md index 0732ff17cb2..6e8381b21fc 100644 --- a/docs/AllRectorsOverview.md +++ b/docs/AllRectorsOverview.md @@ -1,4 +1,4 @@ -# All 403 Rectors Overview +# All 404 Rectors Overview - [Projects](#projects) - [General](#general) @@ -16,6 +16,7 @@ - [DoctrineCodeQuality](#doctrinecodequality) - [DynamicTypeAnalysis](#dynamictypeanalysis) - [ElasticSearchDSL](#elasticsearchdsl) +- [FileSystemRector](#filesystemrector) - [Guzzle](#guzzle) - [Laravel](#laravel) - [Legacy](#legacy) @@ -2701,6 +2702,16 @@ Migrates addFilter to addQuery
+## FileSystemRector + +### `RemoveProjectFileRector` + +- class: `Rector\FileSystemRector\Rector\Removing\RemoveProjectFileRector` + +Remove file relative to project directory + +
+ ## Guzzle ### `MessageAsArrayRector` diff --git a/packages/Autodiscovery/src/Rector/FileSystem/MoveInterfacesToContractNamespaceDirectoryRector.php b/packages/Autodiscovery/src/Rector/FileSystem/MoveInterfacesToContractNamespaceDirectoryRector.php index a3724550dde..9c06f43d1d3 100644 --- a/packages/Autodiscovery/src/Rector/FileSystem/MoveInterfacesToContractNamespaceDirectoryRector.php +++ b/packages/Autodiscovery/src/Rector/FileSystem/MoveInterfacesToContractNamespaceDirectoryRector.php @@ -16,6 +16,8 @@ use Symplify\SmartFileSystem\SmartFileInfo; * @sponsor Thanks https://spaceflow.io/ for sponsoring this rule - visit them on https://github.com/SpaceFlow-app * * Inspiration @see https://github.com/rectorphp/rector/pull/1865/files#diff-0d18e660cdb626958662641b491623f8 + * + * @see \Rector\Autodiscovery\Tests\Rector\FileSystem\MoveInterfacesToContractNamespaceDirectoryRector\MoveInterfacesToContractNamespaceDirectoryRectorTest */ final class MoveInterfacesToContractNamespaceDirectoryRector extends AbstractFileSystemRector { diff --git a/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/MoveEntitiesToEntityDirectoryRectorTest.php b/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/MoveEntitiesToEntityDirectoryRectorTest.php index 23930c12f0a..2e4cd710c4a 100644 --- a/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/MoveEntitiesToEntityDirectoryRectorTest.php +++ b/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/MoveEntitiesToEntityDirectoryRectorTest.php @@ -25,7 +25,7 @@ final class MoveEntitiesToEntityDirectoryRectorTest extends AbstractFileSystemRe { yield [ __DIR__ . '/Source/Controller/RandomEntity.php', - __DIR__ . '/Source/Fixture/Entity/RandomEntity.php', + __DIR__ . '/Source/Entity/Fixture/RandomEntity.php', __DIR__ . '/Expected/ExpectedRandomEntity.php', ]; } diff --git a/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/Source/Entity/Fixture/RandomEntity.php b/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/Source/Entity/Fixture/RandomEntity.php new file mode 100644 index 00000000000..495a569fc9b --- /dev/null +++ b/packages/Autodiscovery/tests/Rector/FileSystem/MoveEntitiesToEntityDirectoryRector/Source/Entity/Fixture/RandomEntity.php @@ -0,0 +1,15 @@ + [ __DIR__ . '/Source/Controller/BananaCommand.php', - __DIR__ . '/Source/Fixture/Command/BananaCommand.php', + __DIR__ . '/Source/Command/Fixture/BananaCommand.php', __DIR__ . '/Expected/Command/ExpectedBananaCommand.php', ]; } diff --git a/packages/Autodiscovery/tests/Rector/FileSystem/MoveServicesBySuffixToDirectoryRector/Source/Command/Fixture/BananaCommand.php b/packages/Autodiscovery/tests/Rector/FileSystem/MoveServicesBySuffixToDirectoryRector/Source/Command/Fixture/BananaCommand.php new file mode 100644 index 00000000000..1d13847f921 --- /dev/null +++ b/packages/Autodiscovery/tests/Rector/FileSystem/MoveServicesBySuffixToDirectoryRector/Source/Command/Fixture/BananaCommand.php @@ -0,0 +1,11 @@ +parser = $parser; $this->parserFactory = $parserFactory; @@ -85,6 +92,7 @@ abstract class AbstractFileSystemRector implements FileSystemRectorInterface $this->removedAndAddedFilesCollector = $removedAndAddedFilesCollector; $this->configuration = $configuration; $this->betterStandardPrinter = $betterStandardPrinter; + $this->parameterProvider = $parameterProvider; } /** diff --git a/packages/FileSystemRector/src/Rector/Removing/RemoveProjectFileRector.php b/packages/FileSystemRector/src/Rector/Removing/RemoveProjectFileRector.php new file mode 100644 index 00000000000..784bc9566bf --- /dev/null +++ b/packages/FileSystemRector/src/Rector/Removing/RemoveProjectFileRector.php @@ -0,0 +1,76 @@ +filePathsToRemove = $filePathsToRemove; + } + + public function refactor(SmartFileInfo $smartFileInfo): void + { + if ($this->filePathsToRemove === []) { + return; + } + + $projectDirectory = $this->getProjectDirectory(); + + $relativePathInProject = $smartFileInfo->getRelativeFilePathFromDirectory($projectDirectory); + + foreach ($this->filePathsToRemove as $filePathsToRemove) { + if ($relativePathInProject !== $filePathsToRemove) { + continue; + } + + $this->removeFile($smartFileInfo); + } + } + + public function getDefinition(): RectorDefinition + { + return new RectorDefinition('Remove file relative to project directory'); + } + + private function getProjectDirectory(): string + { + $this->ensureProjectDirectoryIsSet(); + + return (string) $this->parameterProvider->provideParameter(Option::PROJECT_DIRECTORY_PARAMETER); + } + + private function ensureProjectDirectoryIsSet(): void + { + $projectDirectory = $this->parameterProvider->provideParameter(Option::PROJECT_DIRECTORY_PARAMETER); + + // has value? → skip + if ($projectDirectory) { + return; + } + + throw new ShouldNotHappenException(sprintf( + 'Complete "parameters > %s" in rector.yaml, so Rector can found your directory', + Option::PROJECT_DIRECTORY_PARAMETER + )); + } +} diff --git a/src/Testing/PHPUnit/AbstractFileSystemRectorTestCase.php b/src/Testing/PHPUnit/AbstractFileSystemRectorTestCase.php index f045bf8c3cb..394a119a217 100644 --- a/src/Testing/PHPUnit/AbstractFileSystemRectorTestCase.php +++ b/src/Testing/PHPUnit/AbstractFileSystemRectorTestCase.php @@ -13,6 +13,7 @@ use Rector\FileSystemRector\FileSystemFileProcessor; use Rector\HttpKernel\RectorKernel; use ReflectionClass; use Symfony\Component\Yaml\Yaml; +use Symplify\PackageBuilder\Parameter\ParameterProvider; use Symplify\SmartFileSystem\SmartFileInfo; abstract class AbstractFileSystemRectorTestCase extends AbstractGenericRectorTestCase @@ -58,6 +59,7 @@ abstract class AbstractFileSystemRectorTestCase extends AbstractGenericRectorTes $fileInfo = new SmartFileInfo($file); $temporaryFilePath = $this->createTemporaryFilePath($fileInfo, $file); + require_once $temporaryFilePath; $this->fileSystemFileProcessor->processFileInfo(new SmartFileInfo($temporaryFilePath)); @@ -86,6 +88,12 @@ abstract class AbstractFileSystemRectorTestCase extends AbstractGenericRectorTes return FileSystemRectorInterface::class; } + protected function setParameter(string $name, $value): void + { + $parameterProvider = self::$container->get(ParameterProvider::class); + $parameterProvider->changeParameter($name, $value); + } + private function createContainerWithProvidedRector(): void { $configFileTempPath = $this->createConfigFileTempPath(); diff --git a/tests/Rector/Psr4/MultipleClassFileToPsr4ClassesRector/MultipleClassFileToPsr4ClassesRectorTest.php b/tests/Rector/Psr4/MultipleClassFileToPsr4ClassesRector/MultipleClassFileToPsr4ClassesRectorTest.php index cf40b2ee058..df186a62f47 100644 --- a/tests/Rector/Psr4/MultipleClassFileToPsr4ClassesRector/MultipleClassFileToPsr4ClassesRectorTest.php +++ b/tests/Rector/Psr4/MultipleClassFileToPsr4ClassesRector/MultipleClassFileToPsr4ClassesRectorTest.php @@ -15,9 +15,9 @@ final class MultipleClassFileToPsr4ClassesRectorTest extends AbstractFileSystemR * @param string[] $expectedExceptions * @dataProvider provideDataForTest() */ - public function test(string $originaFile, array $expectedExceptions, bool $shouldDeleteOriginalFile): void + public function test(string $originalFile, array $expectedExceptions, bool $shouldDeleteOriginalFile): void { - $temporaryFilePath = $this->doTestFile($originaFile); + $temporaryFilePath = $this->doTestFile($originalFile); foreach ($expectedExceptions as $expectedExceptionLocation => $expectedFormat) { $this->assertFileExists($expectedExceptionLocation);