![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/rector/rector/packages/PostRector/Application/ |
<?php declare (strict_types=1); namespace Rector\PostRector\Application; use PhpParser\Node\Stmt; use PhpParser\NodeTraverser; use Rector\Core\Logging\CurrentRectorProvider; use Rector\Core\Provider\CurrentFileProvider; use Rector\Core\ValueObject\Application\File; use Rector\PostRector\Contract\Rector\PostRectorInterface; use Rector\PostRector\Rector\ClassRenamingPostRector; use Rector\PostRector\Rector\NameImportingPostRector; use Rector\PostRector\Rector\UnusedImportRemovingPostRector; use Rector\PostRector\Rector\UseAddingPostRector; use Rector\Renaming\Rector\Name\RenameClassRector; use Rector\Skipper\Skipper\Skipper; final class PostFileProcessor { /** * @readonly * @var \Rector\Skipper\Skipper\Skipper */ private $skipper; /** * @readonly * @var \Rector\Core\Provider\CurrentFileProvider */ private $currentFileProvider; /** * @readonly * @var \Rector\Core\Logging\CurrentRectorProvider */ private $currentRectorProvider; /** * @var PostRectorInterface[] */ private $postRectors = []; public function __construct( Skipper $skipper, CurrentFileProvider $currentFileProvider, CurrentRectorProvider $currentRectorProvider, // set order here UseAddingPostRector $useAddingPostRector, NameImportingPostRector $nameImportingPostRector, ClassRenamingPostRector $classRenamingPostRector, UnusedImportRemovingPostRector $unusedImportRemovingPostRector ) { $this->skipper = $skipper; $this->currentFileProvider = $currentFileProvider; $this->currentRectorProvider = $currentRectorProvider; $this->postRectors = [ // priority: 650 $classRenamingPostRector, // priority: 600 $nameImportingPostRector, // priority: 500 $useAddingPostRector, // priority: 100 $unusedImportRemovingPostRector, ]; } /** * @param Stmt[] $stmts * @return Stmt[] */ public function traverse(array $stmts) : array { foreach ($this->postRectors as $postRector) { if ($this->shouldSkipPostRector($postRector)) { continue; } $this->currentRectorProvider->changeCurrentRector($postRector); $nodeTraverser = new NodeTraverser(); $nodeTraverser->addVisitor($postRector); $stmts = $nodeTraverser->traverse($stmts); } return $stmts; } private function shouldSkipPostRector(PostRectorInterface $postRector) : bool { $file = $this->currentFileProvider->getFile(); if (!$file instanceof File) { return \false; } $filePath = $file->getFilePath(); if ($this->skipper->shouldSkipElementAndFilePath($postRector, $filePath)) { return \true; } // skip renaming if rename class rector is skipped return $postRector instanceof ClassRenamingPostRector && $this->skipper->shouldSkipElementAndFilePath(RenameClassRector::class, $filePath); } }