mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-24 03:35:01 +01:00
move diffs to ErrorCollector
This commit is contained in:
parent
4dddf13432
commit
284f732ac8
@ -7,7 +7,7 @@ use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
|
||||
use Rector\Application\ErrorCollector;
|
||||
use Rector\Application\ErrorAndDiffCollector;
|
||||
use Rector\Bridge\Contract\AnalyzedApplicationContainerInterface;
|
||||
use Rector\NodeTypeResolver\Node\Attribute;
|
||||
use Rector\NodeTypeResolver\PhpDoc\NodeAnalyzer\DocBlockAnalyzer;
|
||||
@ -37,18 +37,18 @@ final class JmsInjectAnnotationRector extends AbstractRector
|
||||
private $analyzedApplicationContainer;
|
||||
|
||||
/**
|
||||
* @var ErrorCollector
|
||||
* @var ErrorAndDiffCollector
|
||||
*/
|
||||
private $errorCollector;
|
||||
private $errorAndDiffCollector;
|
||||
|
||||
public function __construct(
|
||||
DocBlockAnalyzer $docBlockAnalyzer,
|
||||
AnalyzedApplicationContainerInterface $analyzedApplicationContainer,
|
||||
ErrorCollector $errorCollector
|
||||
ErrorAndDiffCollector $errorAndDiffCollector
|
||||
) {
|
||||
$this->docBlockAnalyzer = $docBlockAnalyzer;
|
||||
$this->analyzedApplicationContainer = $analyzedApplicationContainer;
|
||||
$this->errorCollector = $errorCollector;
|
||||
$this->errorAndDiffCollector = $errorAndDiffCollector;
|
||||
}
|
||||
|
||||
public function getDefinition(): RectorDefinition
|
||||
@ -137,7 +137,7 @@ CODE_SAMPLE
|
||||
}
|
||||
|
||||
// collect error
|
||||
$this->errorCollector->addErrorWithRectorMessage(
|
||||
$this->errorAndDiffCollector->addErrorWithRectorMessage(
|
||||
self::class,
|
||||
sprintf('Service "%s" was not found in DI Container of your Symfony App.', $serviceName)
|
||||
);
|
||||
|
86
src/Application/ErrorAndDiffCollector.php
Normal file
86
src/Application/ErrorAndDiffCollector.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Rector\Application;
|
||||
|
||||
use Rector\ConsoleDiffer\DifferAndFormatter;
|
||||
use Rector\NodeTypeResolver\FileSystem\CurrentFileInfoProvider;
|
||||
use Rector\Reporting\FileDiff;
|
||||
use Symplify\PackageBuilder\FileSystem\SmartFileInfo;
|
||||
|
||||
final class ErrorAndDiffCollector
|
||||
{
|
||||
/**
|
||||
* @var Error[]
|
||||
*/
|
||||
private $errors = [];
|
||||
|
||||
/**
|
||||
* @var CurrentFileInfoProvider
|
||||
*/
|
||||
private $currentFileInfoProvider;
|
||||
|
||||
/**
|
||||
* @var FileDiff[]
|
||||
*/
|
||||
private $fileDiffs = [];
|
||||
|
||||
/**
|
||||
* @var DifferAndFormatter
|
||||
*/
|
||||
private $differAndFormatter;
|
||||
|
||||
/**
|
||||
* @var AppliedRectorCollector
|
||||
*/
|
||||
private $appliedRectorCollector;
|
||||
|
||||
public function __construct(
|
||||
CurrentFileInfoProvider $currentFileInfoProvider,
|
||||
DifferAndFormatter $differAndFormatter,
|
||||
AppliedRectorCollector $appliedRectorCollector
|
||||
) {
|
||||
$this->currentFileInfoProvider = $currentFileInfoProvider;
|
||||
$this->differAndFormatter = $differAndFormatter;
|
||||
$this->appliedRectorCollector = $appliedRectorCollector;
|
||||
}
|
||||
|
||||
public function addError(Error $error): void
|
||||
{
|
||||
$this->errors[] = $error;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Error[]
|
||||
*/
|
||||
public function getErrors(): array
|
||||
{
|
||||
return $this->errors;
|
||||
}
|
||||
|
||||
public function addErrorWithRectorMessage(string $rectorClass, string $message): void
|
||||
{
|
||||
$this->errors[] = new Error($this->currentFileInfoProvider->getSmartFileInfo(), $message, null, $rectorClass);
|
||||
}
|
||||
|
||||
public function addFileDiff(SmartFileInfo $smartFileInfo, string $newContent, string $oldContent): void
|
||||
{
|
||||
if ($newContent === $oldContent) {
|
||||
return;
|
||||
}
|
||||
|
||||
// always keep the most recent diff
|
||||
$this->fileDiffs[$smartFileInfo->getRealPath()] = new FileDiff(
|
||||
$smartFileInfo->getRealPath(),
|
||||
$this->differAndFormatter->diffAndFormat($oldContent, $newContent),
|
||||
$this->appliedRectorCollector->getRectorClasses()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FileDiff[]
|
||||
*/
|
||||
public function getFileDiffs(): array
|
||||
{
|
||||
return $this->fileDiffs;
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Rector\Application;
|
||||
|
||||
use Rector\NodeTypeResolver\FileSystem\CurrentFileInfoProvider;
|
||||
|
||||
final class ErrorCollector
|
||||
{
|
||||
/**
|
||||
* @var Error[]
|
||||
*/
|
||||
private $errors = [];
|
||||
|
||||
/**
|
||||
* @var CurrentFileInfoProvider
|
||||
*/
|
||||
private $currentFileInfoProvider;
|
||||
|
||||
public function __construct(CurrentFileInfoProvider $currentFileInfoProvider)
|
||||
{
|
||||
$this->currentFileInfoProvider = $currentFileInfoProvider;
|
||||
}
|
||||
|
||||
public function addError(Error $error): void
|
||||
{
|
||||
$this->errors[] = $error;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Error[]
|
||||
*/
|
||||
public function getErrors(): array
|
||||
{
|
||||
return $this->errors;
|
||||
}
|
||||
|
||||
public function addErrorWithRectorMessage(string $rectorClass, string $message): void
|
||||
{
|
||||
$this->errors[] = new Error($this->currentFileInfoProvider->getSmartFileInfo(), $message, null, $rectorClass);
|
||||
}
|
||||
}
|
@ -4,10 +4,8 @@ namespace Rector\Application;
|
||||
|
||||
use PHPStan\AnalysedCodeException;
|
||||
use Rector\Configuration\Configuration;
|
||||
use Rector\ConsoleDiffer\DifferAndFormatter;
|
||||
use Rector\Error\ExceptionCorrector;
|
||||
use Rector\FileSystemRector\FileSystemFileProcessor;
|
||||
use Rector\Reporting\FileDiff;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symplify\PackageBuilder\FileSystem\SmartFileInfo;
|
||||
use Throwable;
|
||||
@ -30,9 +28,9 @@ final class RectorApplication
|
||||
private $exceptionCorrector;
|
||||
|
||||
/**
|
||||
* @var ErrorCollector
|
||||
* @var ErrorAndDiffCollector
|
||||
*/
|
||||
private $errorCollector;
|
||||
private $errorAndDiffCollector;
|
||||
|
||||
/**
|
||||
* @var Configuration
|
||||
@ -49,41 +47,22 @@ final class RectorApplication
|
||||
*/
|
||||
private $filesToReprintCollector;
|
||||
|
||||
/**
|
||||
* @var FileDiff[]
|
||||
*/
|
||||
private $fileDiffs = [];
|
||||
|
||||
/**
|
||||
* @var DifferAndFormatter
|
||||
*/
|
||||
private $differAndFormatter;
|
||||
|
||||
/**
|
||||
* @var AppliedRectorCollector
|
||||
*/
|
||||
private $appliedRectorCollector;
|
||||
|
||||
public function __construct(
|
||||
SymfonyStyle $symfonyStyle,
|
||||
FileSystemFileProcessor $fileSystemFileProcessor,
|
||||
ExceptionCorrector $exceptionCorrector,
|
||||
ErrorCollector $errorCollector,
|
||||
ErrorAndDiffCollector $errorAndDiffCollector,
|
||||
Configuration $configuration,
|
||||
FileProcessor $fileProcessor,
|
||||
FilesToReprintCollector $filesToReprintCollector,
|
||||
DifferAndFormatter $differAndFormatter,
|
||||
AppliedRectorCollector $appliedRectorCollector
|
||||
FilesToReprintCollector $filesToReprintCollector
|
||||
) {
|
||||
$this->symfonyStyle = $symfonyStyle;
|
||||
$this->fileSystemFileProcessor = $fileSystemFileProcessor;
|
||||
$this->exceptionCorrector = $exceptionCorrector;
|
||||
$this->errorCollector = $errorCollector;
|
||||
$this->errorAndDiffCollector = $errorAndDiffCollector;
|
||||
$this->configuration = $configuration;
|
||||
$this->fileProcessor = $fileProcessor;
|
||||
$this->filesToReprintCollector = $filesToReprintCollector;
|
||||
$this->differAndFormatter = $differAndFormatter;
|
||||
$this->appliedRectorCollector = $appliedRectorCollector;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -120,7 +99,7 @@ final class RectorApplication
|
||||
|
||||
$message = $this->exceptionCorrector->getAutoloadExceptionMessageAndAddLocation($analysedCodeException);
|
||||
|
||||
$this->errorCollector->addError(new Error($fileInfo, $message));
|
||||
$this->errorAndDiffCollector->addError(new Error($fileInfo, $message));
|
||||
} catch (Throwable $throwable) {
|
||||
if ($this->symfonyStyle->isVerbose()) {
|
||||
throw $throwable;
|
||||
@ -128,9 +107,11 @@ final class RectorApplication
|
||||
|
||||
$rectorClass = $this->exceptionCorrector->matchRectorClass($throwable);
|
||||
if ($rectorClass) {
|
||||
$this->errorCollector->addErrorWithRectorMessage($rectorClass, $throwable->getMessage());
|
||||
$this->errorAndDiffCollector->addErrorWithRectorMessage($rectorClass, $throwable->getMessage());
|
||||
} else {
|
||||
$this->errorCollector->addError(new Error($fileInfo, $throwable->getMessage(), $throwable->getCode()));
|
||||
$this->errorAndDiffCollector->addError(
|
||||
new Error($fileInfo, $throwable->getMessage(), $throwable->getCode())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -145,7 +126,11 @@ final class RectorApplication
|
||||
foreach ($this->filesToReprintCollector->getFileInfos() as $fileInfoToReprint) {
|
||||
$reprintedOldContent = $fileInfoToReprint->getContents();
|
||||
$reprintedNewContent = $this->fileProcessor->reprintToString($fileInfoToReprint);
|
||||
$this->recordFileDiff($fileInfoToReprint, $reprintedNewContent, $reprintedOldContent);
|
||||
$this->errorAndDiffCollector->addFileDiff(
|
||||
$fileInfoToReprint,
|
||||
$reprintedNewContent,
|
||||
$reprintedOldContent
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$newContent = $this->fileProcessor->processFile($fileInfo);
|
||||
@ -153,28 +138,15 @@ final class RectorApplication
|
||||
foreach ($this->filesToReprintCollector->getFileInfos() as $fileInfoToReprint) {
|
||||
$reprintedOldContent = $fileInfoToReprint->getContents();
|
||||
$reprintedNewContent = $this->fileProcessor->reprintFile($fileInfoToReprint);
|
||||
$this->recordFileDiff($fileInfoToReprint, $reprintedNewContent, $reprintedOldContent);
|
||||
$this->errorAndDiffCollector->addFileDiff(
|
||||
$fileInfoToReprint,
|
||||
$reprintedNewContent,
|
||||
$reprintedOldContent
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->recordFileDiff($fileInfo, $newContent, $oldContent);
|
||||
$this->errorAndDiffCollector->addFileDiff($fileInfo, $newContent, $oldContent);
|
||||
$this->filesToReprintCollector->reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo move to error collector
|
||||
*/
|
||||
private function recordFileDiff(SmartFileInfo $fileInfo, string $newContent, string $oldContent): void
|
||||
{
|
||||
if ($newContent === $oldContent) {
|
||||
return;
|
||||
}
|
||||
|
||||
// always keep the most recent diff
|
||||
$this->fileDiffs[$fileInfo->getRealPath()] = new FileDiff(
|
||||
$fileInfo->getRealPath(),
|
||||
$this->differAndFormatter->diffAndFormat($oldContent, $newContent),
|
||||
$this->appliedRectorCollector->getRectorClasses()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ final class Configuration
|
||||
public function resolveFromInput(InputInterface $input): void
|
||||
{
|
||||
$this->isDryRun = (bool) $input->getOption(Option::OPTION_DRY_RUN);
|
||||
$this->source = (array) $input->getOption(Option::SOURCE);
|
||||
$this->source = (array) $input->getArgument(Option::SOURCE);
|
||||
$this->hideAutoloadErrors = (bool) $input->getOption(Option::HIDE_AUTOLOAD_ERRORS);
|
||||
$this->withStyle = (bool) $input->getOption(Option::OPTION_WITH_STYLE);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Rector\Console\Command;
|
||||
|
||||
use Rector\Application\ErrorCollector;
|
||||
use Rector\Application\ErrorAndDiffCollector;
|
||||
use Rector\Application\RectorApplication;
|
||||
use Rector\Autoloading\AdditionalAutoloader;
|
||||
use Rector\CodingStyle\AfterRectorCodingStyle;
|
||||
@ -12,7 +12,6 @@ use Rector\Console\Output\ProcessCommandReporter;
|
||||
use Rector\Console\Shell;
|
||||
use Rector\FileSystem\FilesFinder;
|
||||
use Rector\Guard\RectorGuard;
|
||||
use Rector\Reporting\FileDiff;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
@ -23,11 +22,6 @@ use Symplify\PackageBuilder\Console\Command\CommandNaming;
|
||||
|
||||
final class ProcessCommand extends Command
|
||||
{
|
||||
/**
|
||||
* @var FileDiff[]
|
||||
*/
|
||||
private $fileDiffs = [];
|
||||
|
||||
/**
|
||||
* @var SymfonyStyle
|
||||
*/
|
||||
@ -54,9 +48,9 @@ final class ProcessCommand extends Command
|
||||
private $rectorGuard;
|
||||
|
||||
/**
|
||||
* @var ErrorCollector
|
||||
* @var ErrorAndDiffCollector
|
||||
*/
|
||||
private $errorCollector;
|
||||
private $errorAndDiffCollector;
|
||||
|
||||
/**
|
||||
* @var AfterRectorCodingStyle
|
||||
@ -79,7 +73,7 @@ final class ProcessCommand extends Command
|
||||
ProcessCommandReporter $processCommandReporter,
|
||||
AdditionalAutoloader $additionalAutoloader,
|
||||
RectorGuard $rectorGuard,
|
||||
ErrorCollector $errorCollector,
|
||||
ErrorAndDiffCollector $errorAndDiffCollector,
|
||||
AfterRectorCodingStyle $afterRectorCodingStyle,
|
||||
Configuration $configuration,
|
||||
RectorApplication $rectorApplication
|
||||
@ -91,7 +85,7 @@ final class ProcessCommand extends Command
|
||||
$this->processCommandReporter = $processCommandReporter;
|
||||
$this->additionalAutoloader = $additionalAutoloader;
|
||||
$this->rectorGuard = $rectorGuard;
|
||||
$this->errorCollector = $errorCollector;
|
||||
$this->errorAndDiffCollector = $errorAndDiffCollector;
|
||||
$this->afterRectorCodingStyle = $afterRectorCodingStyle;
|
||||
$this->configuration = $configuration;
|
||||
$this->rectorApplication = $rectorApplication;
|
||||
@ -149,12 +143,10 @@ final class ProcessCommand extends Command
|
||||
|
||||
$this->rectorApplication->runOnFileInfos($phpFileInfos);
|
||||
|
||||
// $this->processFileInfos($phpFileInfos);
|
||||
$this->processCommandReporter->reportFileDiffs($this->errorAndDiffCollector->getFileDiffs());
|
||||
|
||||
$this->processCommandReporter->reportFileDiffs($this->fileDiffs);
|
||||
|
||||
if ($this->errorCollector->getErrors()) {
|
||||
$this->processCommandReporter->reportErrors($this->errorCollector->getErrors());
|
||||
if ($this->errorAndDiffCollector->getErrors()) {
|
||||
$this->processCommandReporter->reportErrors($this->errorAndDiffCollector->getErrors());
|
||||
return Shell::CODE_ERROR;
|
||||
}
|
||||
|
||||
@ -164,7 +156,7 @@ final class ProcessCommand extends Command
|
||||
|
||||
$this->symfonyStyle->success('Rector is done!');
|
||||
|
||||
if ($this->configuration->isDryRun() && count($this->fileDiffs)) {
|
||||
if ($this->configuration->isDryRun() && count($this->errorAndDiffCollector->getFileDiffs())) {
|
||||
return Shell::CODE_ERROR;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user