From 2ae405dd73a54c3c000ccbb6028025af6265fce3 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 30 Oct 2019 10:57:00 +0100 Subject: [PATCH 1/5] add rector-ci --- .travis.yml | 2 +- composer.json | 3 ++- rector-ci.yaml | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 rector-ci.yaml diff --git a/.travis.yml b/.travis.yml index 597580295ef3..71741ece1f21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,7 +54,7 @@ script: # Eat your own dog food - | if [[ $DOG_FOOD == true ]]; then - bin/rector process src --set dead-code --dry-run + composer rector fi # Run standalone install in non-root package, ref https://github.com/rectorphp/rector/issues/732 diff --git a/composer.json b/composer.json index 2d56a7c93a8c..a4fa9e7c8904 100644 --- a/composer.json +++ b/composer.json @@ -199,7 +199,8 @@ "docs": [ "bin/rector dump-rectors -o markdown > docs/AllRectorsOverview.md", "bin/rector dump-nodes -o markdown > docs/NodesOverview.md" - ] + ], + "rector": "bin/rector process packages src --config rector-ci.yaml --dry-run" }, "scripts-descriptions": { "docs": "Regenerate descriptions of all Rectors to docs/AllRectorsOverview.md file" diff --git a/rector-ci.yaml b/rector-ci.yaml new file mode 100644 index 000000000000..01152b9553d3 --- /dev/null +++ b/rector-ci.yaml @@ -0,0 +1,2 @@ +sets: + - 'clean-code' From 7b22122fe1138ecfa9c59e4bdf8bcf7758fad88e Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 30 Oct 2019 11:12:57 +0100 Subject: [PATCH 2/5] remove unused file --- sample/ScreenSample.php | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 sample/ScreenSample.php diff --git a/sample/ScreenSample.php b/sample/ScreenSample.php deleted file mode 100644 index 02532557d71f..000000000000 --- a/sample/ScreenSample.php +++ /dev/null @@ -1,14 +0,0 @@ - Date: Wed, 30 Oct 2019 11:15:08 +0100 Subject: [PATCH 3/5] move ci scripts to from /bin to /ci --- .travis.yml | 4 ++-- {bin => ci}/check_services_in_yaml_configs.php | 0 {bin => ci}/clean_trailing_spaces.sh | 0 {bin => ci}/run_all_sets.php | 3 +-- composer.json | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) rename {bin => ci}/check_services_in_yaml_configs.php (100%) rename {bin => ci}/clean_trailing_spaces.sh (100%) rename {bin => ci}/run_all_sets.php (97%) diff --git a/.travis.yml b/.travis.yml index 71741ece1f21..f96ed66533cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,8 +47,8 @@ script: - | if [[ $STATIC_ANALYSIS == true ]]; then composer docs - php bin/check_services_in_yaml_configs.php - php bin/run_all_sets.php + php ci/check_services_in_yaml_configs.php + php ci/run_all_sets.php fi # Eat your own dog food diff --git a/bin/check_services_in_yaml_configs.php b/ci/check_services_in_yaml_configs.php similarity index 100% rename from bin/check_services_in_yaml_configs.php rename to ci/check_services_in_yaml_configs.php diff --git a/bin/clean_trailing_spaces.sh b/ci/clean_trailing_spaces.sh similarity index 100% rename from bin/clean_trailing_spaces.sh rename to ci/clean_trailing_spaces.sh diff --git a/bin/run_all_sets.php b/ci/run_all_sets.php similarity index 97% rename from bin/run_all_sets.php rename to ci/run_all_sets.php index cde2f7483e8e..2dcca950ee73 100644 --- a/bin/run_all_sets.php +++ b/ci/run_all_sets.php @@ -47,8 +47,7 @@ } foreach ($errors as $error) { - echo $error; - echo PHP_EOL; + echo $error . PHP_EOL; } exit(ShellCode::ERROR); diff --git a/composer.json b/composer.json index a4fa9e7c8904..37b7515ff6ae 100644 --- a/composer.json +++ b/composer.json @@ -188,7 +188,7 @@ "check-cs": "vendor/bin/ecs check bin packages src tests utils --ansi", "fix-cs": [ "vendor/bin/ecs check bin packages src tests utils --fix --ansi", - "bin/clean_trailing_spaces.sh" + "ci/clean_trailing_spaces.sh" ], "phpstan": "vendor/bin/phpstan analyse packages src tests --error-format symplify --ansi", "changelog": [ From 7a86b244e84fd7c63288ca0746da180343c29ca9 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 30 Oct 2019 11:38:05 +0100 Subject: [PATCH 4/5] travis: allow PHP 7.4 --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f96ed66533cb..b6da2055a475 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,7 +24,6 @@ matrix: env: STANDALONE=true - php: '7.3' env: DOG_FOOD=true - - php: '7.4snapshot' install: - composer update $COMPOSER_FLAGS From 8dc4336ce86f85d8c8499f038a8b367a38aa74fc Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 30 Oct 2019 11:52:57 +0100 Subject: [PATCH 5/5] add SetOptinosResolver and ConfigResolver --- bin/container.php | 8 ++- .../CompleteDynamicPropertiesRector.php | 4 ++ ...nerGetDynamicMethodReturnTypeExtension.php | 11 ++-- phpstan.neon | 2 +- rector-ci.yaml | 11 +++- src/Bootstrap/ConfigResolver.php | 52 +++++++++++++++++++ .../SetOptionResolver.php | 4 +- src/Bootstrap/SetsResolver.php | 26 ++++++++++ .../RectorContainerFactory.php | 2 +- 9 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 src/Bootstrap/ConfigResolver.php rename src/{Console/Option => Bootstrap}/SetOptionResolver.php (98%) create mode 100644 src/Bootstrap/SetsResolver.php diff --git a/bin/container.php b/bin/container.php index f56fee5df3d0..c926e1e54461 100644 --- a/bin/container.php +++ b/bin/container.php @@ -2,7 +2,8 @@ declare(strict_types=1); -use Rector\Console\Option\SetOptionResolver; +use Rector\Bootstrap\ConfigResolver; +use Rector\Bootstrap\SetOptionResolver; use Rector\DependencyInjection\RectorContainerFactory; use Rector\Exception\Configuration\SetNotFoundException; use Rector\Set\Set; @@ -31,6 +32,11 @@ // remove empty values $configs = array_filter($configs); +// resolve: parameters > sets +$configResolver = new ConfigResolver(); +$parameterSetsConfigs = $configResolver->resolveFromParameterSetsFromConfigFiles($configs); +$configs = array_merge($configs, $parameterSetsConfigs); + // Build DI container $rectorContainerFactory = new RectorContainerFactory(); return $rectorContainerFactory->createFromConfigs($configs); diff --git a/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php b/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php index 01120e45997c..f0664c708013 100644 --- a/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php +++ b/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php @@ -139,6 +139,10 @@ private function resolveFetchedLocalPropertyNameToType(Class_ $class): array return null; } + if (! $node->var instanceof Variable) { + return null; + } + if (! $this->isName($node->var, 'this')) { return null; } diff --git a/packages/NodeTypeResolver/src/Type/TypeExtension/StaticContainerGetDynamicMethodReturnTypeExtension.php b/packages/NodeTypeResolver/src/Type/TypeExtension/StaticContainerGetDynamicMethodReturnTypeExtension.php index 7ceb49a01311..8814c1ab337f 100644 --- a/packages/NodeTypeResolver/src/Type/TypeExtension/StaticContainerGetDynamicMethodReturnTypeExtension.php +++ b/packages/NodeTypeResolver/src/Type/TypeExtension/StaticContainerGetDynamicMethodReturnTypeExtension.php @@ -13,7 +13,6 @@ use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use Psr\Container\ContainerInterface; -use Rector\Exception\ShouldNotHappenException; final class StaticContainerGetDynamicMethodReturnTypeExtension implements DynamicMethodReturnTypeExtension { @@ -32,7 +31,8 @@ public function getTypeFromMethodCall( MethodCall $methodCall, Scope $scope ): Type { - $valueType = $scope->getType($methodCall->args[0]->value); + $value = $methodCall->args[0]->value; + $valueType = $scope->getType($value); // we don't know what it is if ($valueType instanceof MixedType) { @@ -43,10 +43,7 @@ public function getTypeFromMethodCall( return new ObjectType($valueType->getValue()); } - throw new ShouldNotHappenException(sprintf( - '%s type given, only "%s" is supported', - get_class($valueType), - ConstantStringType::class - )); + // unknown, probably variable + return new MixedType(); } } diff --git a/phpstan.neon b/phpstan.neon index 0c51b1b3a4fe..eab4b55cb04d 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -169,7 +169,7 @@ parameters: - '#Method Rector\\Symfony\\Bridge\\DefaultAnalyzedSymfonyApplicationContainer\:\:getService\(\) should return object but returns object\|null#' - '#Call to function property_exists\(\) with string and (.*?) will always evaluate to false#' - - '#Method Rector\\Console\\Option\\SetOptionResolver\:\:separateVersionedAndUnversionedSets\(\) should return array\> but returns array\|string\>\>#' + - '#Method Rector\\Bootstrap\\SetOptionResolver\:\:separateVersionedAndUnversionedSets\(\) should return array\> but returns array\|string\>\>#' - '#Access to an undefined property PhpParser\\Node\\FunctionLike\|PhpParser\\Node\\Stmt\\ClassLike\:\:\$stmts#' - '#Property Rector\\TypeDeclaration\\TypeInferer\\(.*?)\:\:\$(.*?)TypeInferers \(array\) does not accept array#' diff --git a/rector-ci.yaml b/rector-ci.yaml index 01152b9553d3..ba8d0d700787 100644 --- a/rector-ci.yaml +++ b/rector-ci.yaml @@ -1,2 +1,9 @@ -sets: - - 'clean-code' +parameters: + exclude_paths: + - "/Fixture/" + - "/Fixtures/" + - "/Source/" + - "/Expected/" + + sets: + - "code-quality" diff --git a/src/Bootstrap/ConfigResolver.php b/src/Bootstrap/ConfigResolver.php new file mode 100644 index 000000000000..2d03511054f3 --- /dev/null +++ b/src/Bootstrap/ConfigResolver.php @@ -0,0 +1,52 @@ +setOptionResolver = new SetOptionResolver(); + $this->setsResolver = new SetsResolver(); + } + + /** + * @param string[] $configFiles + * @return string[] + */ + public function resolveFromParameterSetsFromConfigFiles(array $configFiles): array + { + $configs = []; + + $sets = $this->setsResolver->resolveFromConfigFiles($configFiles); + return array_merge($configs, $this->resolveFromSets($sets)); + } + + /** + * @param string[] $sets + * @return string[] + */ + private function resolveFromSets(array $sets): array + { + $configs = []; + foreach ($sets as $set) { + $configs[] = $this->setOptionResolver->detectFromNameAndDirectory($set, Set::SET_DIRECTORY); + } + + return $configs; + } +} diff --git a/src/Console/Option/SetOptionResolver.php b/src/Bootstrap/SetOptionResolver.php similarity index 98% rename from src/Console/Option/SetOptionResolver.php rename to src/Bootstrap/SetOptionResolver.php index 9bc256bf4bf7..73e44957ca9f 100644 --- a/src/Console/Option/SetOptionResolver.php +++ b/src/Bootstrap/SetOptionResolver.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Rector\Console\Option; +namespace Rector\Bootstrap; use Nette\Utils\ObjectHelpers; use Nette\Utils\Strings; @@ -43,7 +43,7 @@ public function detectFromInputAndDirectory(InputInterface $input, string $confi return $this->detectFromNameAndDirectory($setName, $configDirectory); } - public function detectFromNameAndDirectory(string $setName, string $configDirectory): ?string + public function detectFromNameAndDirectory(string $setName, string $configDirectory): string { $nearestMatches = $this->findNearestMatchingFiles($configDirectory, $setName); if (count($nearestMatches) === 0) { diff --git a/src/Bootstrap/SetsResolver.php b/src/Bootstrap/SetsResolver.php new file mode 100644 index 000000000000..d4f0576322b0 --- /dev/null +++ b/src/Bootstrap/SetsResolver.php @@ -0,0 +1,26 @@ +