diff --git a/.travis.yml b/.travis.yml index 597580295ef3..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 @@ -47,14 +46,14 @@ 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 - | 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/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/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 2d56a7c93a8c..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": [ @@ -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/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 new file mode 100644 index 000000000000..ba8d0d700787 --- /dev/null +++ b/rector-ci.yaml @@ -0,0 +1,9 @@ +parameters: + exclude_paths: + - "/Fixture/" + - "/Fixtures/" + - "/Source/" + - "/Expected/" + + sets: + - "code-quality" 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 @@ -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 @@ +