Updated Rector to commit bd6c02a3f8154152f879106c8e77731eb3f4e69c

bd6c02a3f8 [DX] Reduce inner use of SmartFileInfo, and injected SmartFileSystem (#2847)
This commit is contained in:
Tomas Votruba 2022-08-29 17:51:46 +00:00
parent 7823b6a978
commit 583eacb780
14 changed files with 88 additions and 41 deletions

View File

@ -7,6 +7,7 @@ use Rector\Core\Differ\DefaultDiffer;
use Rector\Core\ValueObject\Application\File;
use Rector\Core\ValueObject\Reporting\FileDiff;
use RectorPrefix202208\Symplify\PackageBuilder\Console\Output\ConsoleDiffer;
use RectorPrefix202208\Symplify\SmartFileSystem\SmartFileSystem;
final class FileDiffFactory
{
/**
@ -19,14 +20,22 @@ final class FileDiffFactory
* @var \Symplify\PackageBuilder\Console\Output\ConsoleDiffer
*/
private $consoleDiffer;
public function __construct(DefaultDiffer $defaultDiffer, ConsoleDiffer $consoleDiffer)
/**
* @readonly
* @var \Symplify\SmartFileSystem\SmartFileSystem
*/
private $smartFileSystem;
public function __construct(DefaultDiffer $defaultDiffer, ConsoleDiffer $consoleDiffer, SmartFileSystem $smartFileSystem)
{
$this->defaultDiffer = $defaultDiffer;
$this->consoleDiffer = $consoleDiffer;
$this->smartFileSystem = $smartFileSystem;
}
public function createFileDiff(File $file, string $oldContent, string $newContent) : FileDiff
{
$relativeFilePath = $this->smartFileSystem->makePathRelative($file->getFilePath(), (string) \realpath(\getcwd()));
$relativeFilePath = \rtrim($relativeFilePath, '/');
// always keep the most recent diff
return new FileDiff($file->getRelativeFilePath(), $this->defaultDiffer->diff($oldContent, $newContent), $this->consoleDiffer->diff($oldContent, $newContent), $file->getRectorWithLineChanges());
return new FileDiff($relativeFilePath, $this->defaultDiffer->diff($oldContent, $newContent), $this->consoleDiffer->diff($oldContent, $newContent), $file->getRectorWithLineChanges());
}
}

View File

@ -11,13 +11,12 @@ use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLo
use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedSingleFileSourceLocator;
use Rector\NodeTypeResolver\Contract\SourceLocatorProviderInterface;
use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment;
use Symplify\SmartFileSystem\SmartFileInfo;
final class DynamicSourceLocatorProvider implements SourceLocatorProviderInterface
{
/**
* @var string[]
*/
private $files = [];
private $filePaths = [];
/**
* @var array<string, string[]>
*/
@ -41,16 +40,16 @@ final class DynamicSourceLocatorProvider implements SourceLocatorProviderInterfa
$this->fileNodesFetcher = $fileNodesFetcher;
$this->phpVersion = $phpVersion;
}
public function setFileInfo(SmartFileInfo $fileInfo) : void
public function setFilePath(string $filePath) : void
{
$this->files = [$fileInfo->getRealPath()];
$this->filePaths = [$filePath];
}
/**
* @param string[] $files
*/
public function addFiles(array $files) : void
{
$this->files = \array_merge($this->files, $files);
$this->filePaths = \array_merge($this->filePaths, $files);
}
public function provide() : SourceLocator
{
@ -60,7 +59,7 @@ final class DynamicSourceLocatorProvider implements SourceLocatorProviderInterfa
return $this->aggregateSourceLocator;
}
$sourceLocators = [];
foreach ($this->files as $file) {
foreach ($this->filePaths as $file) {
$sourceLocators[] = new OptimizedSingleFileSourceLocator($this->fileNodesFetcher, $file);
}
foreach ($this->filesByDirectory as $files) {

View File

@ -11,7 +11,6 @@ use Rector\Naming\Naming\UseImportsResolver;
use Rector\PostRector\Contract\Collector\NodeCollectorInterface;
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
use Symplify\SmartFileSystem\SmartFileInfo;
final class UseNodesToAddCollector implements NodeCollectorInterface
{
/**
@ -118,16 +117,16 @@ final class UseNodesToAddCollector implements NodeCollectorInterface
/**
* @return AliasedObjectType[]|FullyQualifiedObjectType[]
*/
public function getObjectImportsByFileInfo(SmartFileInfo $smartFileInfo) : array
public function getObjectImportsByFilePath(string $filePath) : array
{
return $this->useImportTypesInFilePath[$smartFileInfo->getRealPath()] ?? [];
return $this->useImportTypesInFilePath[$filePath] ?? [];
}
/**
* @return FullyQualifiedObjectType[]
*/
public function getFunctionImportsByFileInfo(SmartFileInfo $smartFileInfo) : array
public function getFunctionImportsByFilePath(string $filePath) : array
{
return $this->functionUseImportTypesInFilePath[$smartFileInfo->getRealPath()] ?? [];
return $this->functionUseImportTypesInFilePath[$filePath] ?? [];
}
private function isShortClassImported(string $filePath, string $shortName) : bool
{

View File

@ -75,8 +75,8 @@ final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRe
}
$file = $this->currentFileProvider->getFile();
$smartFileInfo = $file->getSmartFileInfo();
$useImportTypes = $this->useNodesToAddCollector->getObjectImportsByFileInfo($smartFileInfo);
$functionUseImportTypes = $this->useNodesToAddCollector->getFunctionImportsByFileInfo($smartFileInfo);
$useImportTypes = $this->useNodesToAddCollector->getObjectImportsByFilePath($smartFileInfo->getRealPath());
$functionUseImportTypes = $this->useNodesToAddCollector->getFunctionImportsByFilePath($smartFileInfo->getRealPath());
$oldToNewClasses = $this->renamedClassesDataCollector->getOldToNewClasses();
// nothing to import or remove
if ($useImportTypes === [] && $functionUseImportTypes === [] && $oldToNewClasses === []) {

View File

@ -146,7 +146,7 @@ abstract class AbstractRectorTestCase extends \Rector\Testing\PHPUnit\AbstractTe
}
private function processFileInfo(SmartFileInfo $fileInfo) : string
{
$this->dynamicSourceLocatorProvider->setFileInfo($fileInfo);
$this->dynamicSourceLocatorProvider->setFilePath($fileInfo->getRealPath());
// needed for PHPStan, because the analyzed file is just created in /temp - need for trait and similar deps
/** @var NodeScopeResolver $nodeScopeResolver */
$nodeScopeResolver = $this->getService(NodeScopeResolver::class);

View File

@ -11,6 +11,7 @@ use Rector\Core\Application\FileSystem\RemovedAndAddedFilesCollector;
use Rector\Core\Contract\Console\OutputStyleInterface;
use Rector\Core\Contract\Processor\FileProcessorInterface;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\FileSystem\FilePathHelper;
use Rector\Core\PhpParser\Printer\FormatPerservingPrinter;
use Rector\Core\Provider\CurrentFileProvider;
use Rector\Core\ValueObject\Application\File;
@ -63,7 +64,12 @@ final class PhpFileProcessor implements FileProcessorInterface
* @var \Rector\ChangesReporting\ValueObjectFactory\ErrorFactory
*/
private $errorFactory;
public function __construct(FormatPerservingPrinter $formatPerservingPrinter, FileProcessor $fileProcessor, RemovedAndAddedFilesCollector $removedAndAddedFilesCollector, OutputStyleInterface $rectorOutputStyle, FileDiffFileDecorator $fileDiffFileDecorator, CurrentFileProvider $currentFileProvider, PostFileProcessor $postFileProcessor, ErrorFactory $errorFactory)
/**
* @readonly
* @var \Rector\Core\FileSystem\FilePathHelper
*/
private $filePathHelper;
public function __construct(FormatPerservingPrinter $formatPerservingPrinter, FileProcessor $fileProcessor, RemovedAndAddedFilesCollector $removedAndAddedFilesCollector, OutputStyleInterface $rectorOutputStyle, FileDiffFileDecorator $fileDiffFileDecorator, CurrentFileProvider $currentFileProvider, PostFileProcessor $postFileProcessor, ErrorFactory $errorFactory, FilePathHelper $filePathHelper)
{
$this->formatPerservingPrinter = $formatPerservingPrinter;
$this->fileProcessor = $fileProcessor;
@ -73,6 +79,7 @@ final class PhpFileProcessor implements FileProcessorInterface
$this->currentFileProvider = $currentFileProvider;
$this->postFileProcessor = $postFileProcessor;
$this->errorFactory = $errorFactory;
$this->filePathHelper = $filePathHelper;
}
/**
* @return array{system_errors: SystemError[], file_diffs: FileDiff[]}
@ -147,7 +154,8 @@ final class PhpFileProcessor implements FileProcessorInterface
if ($this->rectorOutputStyle->isVerbose() || StaticPHPUnitEnvironment::isPHPUnitRun()) {
throw $throwable;
}
$systemError = new SystemError($throwable->getMessage(), $file->getRelativeFilePath(), $throwable->getLine());
$relativeFilePath = $this->filePathHelper->relativePath($file->getFilePath());
$systemError = new SystemError($throwable->getMessage(), $relativeFilePath, $throwable->getLine());
return [$systemError];
}
return [];
@ -168,8 +176,7 @@ final class PhpFileProcessor implements FileProcessorInterface
if (!$this->rectorOutputStyle->isVerbose()) {
return;
}
$smartFileInfo = $file->getSmartFileInfo();
$message = $smartFileInfo->getRelativeFilePathFromDirectory(\getcwd());
$this->rectorOutputStyle->writeln($message);
$relativeFilePath = $this->filePathHelper->relativePath($file->getFilePath());
$this->rectorOutputStyle->writeln($relativeFilePath);
}
}

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = '6770dad95ec2b82fa739eb134042589b810e87cd';
public const PACKAGE_VERSION = 'bd6c02a3f8154152f879106c8e77731eb3f4e69c';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2022-08-29 18:42:06';
public const RELEASE_DATE = '2022-08-29 19:47:40';
/**
* @var int
*/

View File

@ -0,0 +1,28 @@
<?php
declare (strict_types=1);
namespace Rector\Core\FileSystem;
use RectorPrefix202208\Symplify\SmartFileSystem\SmartFileSystem;
final class FilePathHelper
{
/**
* @readonly
* @var \Symplify\SmartFileSystem\SmartFileSystem
*/
private $smartFileSystem;
public function __construct(SmartFileSystem $smartFileSystem)
{
$this->smartFileSystem = $smartFileSystem;
}
public function relativePath(string $fileRealPath) : string
{
$normalizedFileRealPath = $this->normalizePath($fileRealPath);
$relativeFilePath = $this->smartFileSystem->makePathRelative($normalizedFileRealPath, (string) \realpath(\getcwd()));
return \rtrim($relativeFilePath, '/');
}
private function normalizePath(string $filePath) : string
{
return \str_replace('\\', '/', $filePath);
}
}

View File

@ -23,6 +23,7 @@ use Rector\Core\Console\Output\RectorOutputStyle;
use Rector\Core\Contract\Rector\PhpRectorInterface;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Exclusion\ExclusionManager;
use Rector\Core\FileSystem\FilePathHelper;
use Rector\Core\Logging\CurrentRectorProvider;
use Rector\Core\NodeDecorator\CreatedByRuleDecorator;
use Rector\Core\PhpParser\Comparing\NodeComparator;
@ -148,10 +149,14 @@ CODE_SAMPLE;
* @var \Rector\Core\Console\Output\RectorOutputStyle
*/
private $rectorOutputStyle;
/**
* @var \Rector\Core\FileSystem\FilePathHelper
*/
private $filePathHelper;
/**
* @required
*/
public function autowire(NodesToRemoveCollector $nodesToRemoveCollector, NodeRemover $nodeRemover, NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeFactory $nodeFactory, PhpDocInfoFactory $phpDocInfoFactory, ExclusionManager $exclusionManager, StaticTypeMapper $staticTypeMapper, CurrentRectorProvider $currentRectorProvider, CurrentNodeProvider $currentNodeProvider, Skipper $skipper, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, NodeComparator $nodeComparator, CurrentFileProvider $currentFileProvider, RectifiedAnalyzer $rectifiedAnalyzer, CreatedByRuleDecorator $createdByRuleDecorator, ChangedNodeScopeRefresher $changedNodeScopeRefresher, RectorOutputStyle $rectorOutputStyle) : void
public function autowire(NodesToRemoveCollector $nodesToRemoveCollector, NodeRemover $nodeRemover, NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeFactory $nodeFactory, PhpDocInfoFactory $phpDocInfoFactory, ExclusionManager $exclusionManager, StaticTypeMapper $staticTypeMapper, CurrentRectorProvider $currentRectorProvider, CurrentNodeProvider $currentNodeProvider, Skipper $skipper, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, NodeComparator $nodeComparator, CurrentFileProvider $currentFileProvider, RectifiedAnalyzer $rectifiedAnalyzer, CreatedByRuleDecorator $createdByRuleDecorator, ChangedNodeScopeRefresher $changedNodeScopeRefresher, RectorOutputStyle $rectorOutputStyle, FilePathHelper $filePathHelper) : void
{
$this->nodesToRemoveCollector = $nodesToRemoveCollector;
$this->nodeRemover = $nodeRemover;
@ -173,6 +178,7 @@ CODE_SAMPLE;
$this->createdByRuleDecorator = $createdByRuleDecorator;
$this->changedNodeScopeRefresher = $changedNodeScopeRefresher;
$this->rectorOutputStyle = $rectorOutputStyle;
$this->filePathHelper = $filePathHelper;
}
/**
* @return Node[]|null
@ -353,7 +359,8 @@ CODE_SAMPLE;
if (!$this->rectorOutputStyle->isDebug()) {
return;
}
$this->rectorOutputStyle->writeln('[file] ' . $this->file->getRelativeFilePath());
$relativeFilePath = $this->filePathHelper->relativePath($this->file->getFilePath());
$this->rectorOutputStyle->writeln('[file] ' . $relativeFilePath);
$this->rectorOutputStyle->writeln('[rule] ' . static::class);
$this->rectorOutputStyle->newLine(1);
}

View File

@ -154,8 +154,4 @@ final class File
{
return $this->rectorWithLineChanges;
}
public function getRelativeFilePath() : string
{
return $this->smartFileInfo->getRelativeFilePathFromCwd();
}
}

2
vendor/autoload.php vendored
View File

@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit36c5951c0a46e555e524e56f868d09d4::getLoader();
return ComposerAutoloaderInit83716a21ad55eb60ab18d8cb830f08a9::getLoader();

View File

@ -1497,6 +1497,7 @@ return array(
'Rector\\Core\\Exception\\ShouldNotHappenException' => $baseDir . '/src/Exception/ShouldNotHappenException.php',
'Rector\\Core\\Exception\\VersionException' => $baseDir . '/src/Exception/VersionException.php',
'Rector\\Core\\Exclusion\\ExclusionManager' => $baseDir . '/src/Exclusion/ExclusionManager.php',
'Rector\\Core\\FileSystem\\FilePathHelper' => $baseDir . '/src/FileSystem/FilePathHelper.php',
'Rector\\Core\\FileSystem\\FilesFinder' => $baseDir . '/src/FileSystem/FilesFinder.php',
'Rector\\Core\\FileSystem\\FilesystemTweaker' => $baseDir . '/src/FileSystem/FilesystemTweaker.php',
'Rector\\Core\\FileSystem\\PhpFilesFinder' => $baseDir . '/src/FileSystem/PhpFilesFinder.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit36c5951c0a46e555e524e56f868d09d4
class ComposerAutoloaderInit83716a21ad55eb60ab18d8cb830f08a9
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInit36c5951c0a46e555e524e56f868d09d4
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit36c5951c0a46e555e524e56f868d09d4', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit83716a21ad55eb60ab18d8cb830f08a9', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit36c5951c0a46e555e524e56f868d09d4', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit83716a21ad55eb60ab18d8cb830f08a9', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit36c5951c0a46e555e524e56f868d09d4::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit83716a21ad55eb60ab18d8cb830f08a9::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInit36c5951c0a46e555e524e56f868d09d4::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInit83716a21ad55eb60ab18d8cb830f08a9::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire36c5951c0a46e555e524e56f868d09d4($fileIdentifier, $file);
composerRequire83716a21ad55eb60ab18d8cb830f08a9($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInit36c5951c0a46e555e524e56f868d09d4
* @param string $file
* @return void
*/
function composerRequire36c5951c0a46e555e524e56f868d09d4($fileIdentifier, $file)
function composerRequire83716a21ad55eb60ab18d8cb830f08a9($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit36c5951c0a46e555e524e56f868d09d4
class ComposerStaticInit83716a21ad55eb60ab18d8cb830f08a9
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@ -1792,6 +1792,7 @@ class ComposerStaticInit36c5951c0a46e555e524e56f868d09d4
'Rector\\Core\\Exception\\ShouldNotHappenException' => __DIR__ . '/../..' . '/src/Exception/ShouldNotHappenException.php',
'Rector\\Core\\Exception\\VersionException' => __DIR__ . '/../..' . '/src/Exception/VersionException.php',
'Rector\\Core\\Exclusion\\ExclusionManager' => __DIR__ . '/../..' . '/src/Exclusion/ExclusionManager.php',
'Rector\\Core\\FileSystem\\FilePathHelper' => __DIR__ . '/../..' . '/src/FileSystem/FilePathHelper.php',
'Rector\\Core\\FileSystem\\FilesFinder' => __DIR__ . '/../..' . '/src/FileSystem/FilesFinder.php',
'Rector\\Core\\FileSystem\\FilesystemTweaker' => __DIR__ . '/../..' . '/src/FileSystem/FilesystemTweaker.php',
'Rector\\Core\\FileSystem\\PhpFilesFinder' => __DIR__ . '/../..' . '/src/FileSystem/PhpFilesFinder.php',
@ -3239,9 +3240,9 @@ class ComposerStaticInit36c5951c0a46e555e524e56f868d09d4
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit36c5951c0a46e555e524e56f868d09d4::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit36c5951c0a46e555e524e56f868d09d4::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit36c5951c0a46e555e524e56f868d09d4::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit83716a21ad55eb60ab18d8cb830f08a9::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit83716a21ad55eb60ab18d8cb830f08a9::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit83716a21ad55eb60ab18d8cb830f08a9::$classMap;
}, null, ClassLoader::class);
}