From 48cb8a256db8cabbf00d7a125fb838d843d9415e Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 25 Oct 2021 16:48:32 +0200 Subject: [PATCH] Tiny cherry-picks from PHPStan 1.0 update (#1058) --- composer.json | 2 +- .../Skipper/FluentMethodCallSkipper.php | 2 +- .../Ternary/TernaryToNullCoalescingRector.php | 4 ---- src/HttpKernel/RectorKernel.php | 2 ++ src/PhpParser/AstResolver.php | 19 ++++++++----------- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/composer.json b/composer.json index ee2c0e5a595..3f2891a2318 100644 --- a/composer.json +++ b/composer.json @@ -27,9 +27,9 @@ "rector/rector-doctrine": "^0.11.24", "rector/rector-laravel": "^0.11.8", "rector/rector-nette": "^0.11.29", + "rector/rector-phpoffice": "^0.11.4", "rector/rector-phpunit": "^0.11.11", "rector/rector-symfony": "^0.11.26", - "rector/rector-phpoffice": "^0.11.4", "sebastian/diff": "^4.0.4", "ssch/typo3-rector": "^0.11.26", "symfony/console": "^5.3.7", diff --git a/rules/Defluent/Skipper/FluentMethodCallSkipper.php b/rules/Defluent/Skipper/FluentMethodCallSkipper.php index 0e27b2bf159..f7d75d10d63 100644 --- a/rules/Defluent/Skipper/FluentMethodCallSkipper.php +++ b/rules/Defluent/Skipper/FluentMethodCallSkipper.php @@ -19,7 +19,7 @@ final class FluentMethodCallSkipper * Skip query and builder * @see https://ocramius.github.io/blog/fluent-interfaces-are-evil/ "When does a fluent interface make sense? * - * @var class-string[] + * @var string[] */ private const ALLOWED_FLUENT_TYPES = [ // symfony diff --git a/rules/Php70/Rector/Ternary/TernaryToNullCoalescingRector.php b/rules/Php70/Rector/Ternary/TernaryToNullCoalescingRector.php index ee3ad59b9eb..e8058a033b3 100644 --- a/rules/Php70/Rector/Ternary/TernaryToNullCoalescingRector.php +++ b/rules/Php70/Rector/Ternary/TernaryToNullCoalescingRector.php @@ -98,10 +98,6 @@ final class TernaryToNullCoalescingRector extends AbstractRector implements MinP } // none or multiple isset values cannot be handled here - if (! isset($isset->vars[0])) { - return null; - } - if (count($isset->vars) > 1) { return null; } diff --git a/src/HttpKernel/RectorKernel.php b/src/HttpKernel/RectorKernel.php index 713c439a81d..c23cc9c2676 100644 --- a/src/HttpKernel/RectorKernel.php +++ b/src/HttpKernel/RectorKernel.php @@ -20,6 +20,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpKernel\Bundle\BundleInterface; use Symfony\Component\HttpKernel\Config\FileLocator; use Symfony\Component\HttpKernel\Kernel; +use Symplify\Astral\Bundle\AstralBundle; use Symplify\AutowireArrayParameter\DependencyInjection\CompilerPass\AutowireArrayParameterCompilerPass; use Symplify\ComposerJsonManipulator\Bundle\ComposerJsonManipulatorBundle; use Symplify\ConsoleColorDiff\Bundle\ConsoleColorDiffBundle; @@ -83,6 +84,7 @@ final class RectorKernel extends Kernel new ComposerJsonManipulatorBundle(), new SkipperBundle(), new SimplePhpDocParserBundle(), + new AstralBundle(), ]; } diff --git a/src/PhpParser/AstResolver.php b/src/PhpParser/AstResolver.php index 407c670c43f..c8ddf2de55f 100644 --- a/src/PhpParser/AstResolver.php +++ b/src/PhpParser/AstResolver.php @@ -19,7 +19,6 @@ use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\Trait_; use PhpParser\NodeFinder; -use PhpParser\Parser; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\MethodReflection; @@ -34,6 +33,7 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\NodeTypeResolver\NodeTypeResolver; use ReflectionProperty; +use Symplify\Astral\PhpParser\SmartPhpParser; use Symplify\SmartFileSystem\SmartFileInfo; use Symplify\SmartFileSystem\SmartFileSystem; @@ -68,7 +68,7 @@ final class AstResolver private array $classLikesByName = []; public function __construct( - private Parser $parser, + private SmartPhpParser $smartPhpParser, private SmartFileSystem $smartFileSystem, private NodeFinder $nodeFinder, private NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator, @@ -254,17 +254,15 @@ final class AstResolver return null; } - $fileContent = $this->smartFileSystem->readFile($fileName); - - $nodes = $this->parser->parse($fileContent); - if ($nodes === null) { + $stmts = $this->smartPhpParser->parseFile($fileName); + if ($stmts === []) { // avoid parsing falsy-file again $this->classLikesByName[$classReflection->getName()] = null; return null; } /** @var array $classLikes */ - $classLikes = $this->betterNodeFinder->findInstanceOf($nodes, ClassLike::class); + $classLikes = $this->betterNodeFinder->findInstanceOf($stmts, ClassLike::class); $reflectionClassName = $classReflection->getName(); foreach ($classLikes as $classLike) { @@ -366,16 +364,15 @@ final class AstResolver */ private function parseFileNameToDecoratedNodes(string $fileName): ?array { - $fileContent = $this->smartFileSystem->readFile($fileName); - $nodes = $this->parser->parse($fileContent); - if ($nodes === null) { + $stmts = $this->smartPhpParser->parseFile($fileName); + if ($stmts === []) { return null; } $smartFileInfo = new SmartFileInfo($fileName); $file = new File($smartFileInfo, $smartFileInfo->getContents()); - return $this->nodeScopeAndMetadataDecorator->decorateNodesFromFile($file, $nodes); + return $this->nodeScopeAndMetadataDecorator->decorateNodesFromFile($file, $stmts); } /**