mirror of
https://github.com/rectorphp/rector.git
synced 2025-03-24 09:19:47 +01:00
commit
5400d6c5c1
@ -7,6 +7,7 @@ use Rector\Application\FileSystem\RemovedAndAddedFilesCollector;
|
||||
use Rector\ConsoleDiffer\DifferAndFormatter;
|
||||
use Rector\Error\ExceptionCorrector;
|
||||
use Rector\Reporting\FileDiff;
|
||||
use Rector\Reporting\RemovedNodesCollector;
|
||||
use Symplify\PackageBuilder\FileSystem\SmartFileInfo;
|
||||
use Throwable;
|
||||
|
||||
@ -42,16 +43,23 @@ final class ErrorAndDiffCollector
|
||||
*/
|
||||
private $removedAndAddedFilesCollector;
|
||||
|
||||
/**
|
||||
* @var RemovedNodesCollector
|
||||
*/
|
||||
private $removedNodesCollector;
|
||||
|
||||
public function __construct(
|
||||
DifferAndFormatter $differAndFormatter,
|
||||
AppliedRectorCollector $appliedRectorCollector,
|
||||
ExceptionCorrector $exceptionCorrector,
|
||||
RemovedAndAddedFilesCollector $removedAndAddedFilesCollector
|
||||
RemovedAndAddedFilesCollector $removedAndAddedFilesCollector,
|
||||
RemovedNodesCollector $removedNodesCollector
|
||||
) {
|
||||
$this->differAndFormatter = $differAndFormatter;
|
||||
$this->appliedRectorCollector = $appliedRectorCollector;
|
||||
$this->exceptionCorrector = $exceptionCorrector;
|
||||
$this->removedAndAddedFilesCollector = $removedAndAddedFilesCollector;
|
||||
$this->removedNodesCollector = $removedNodesCollector;
|
||||
}
|
||||
|
||||
public function addError(Error $error): void
|
||||
@ -72,6 +80,11 @@ final class ErrorAndDiffCollector
|
||||
return $this->removedAndAddedFilesCollector->getAffectedFilesCount();
|
||||
}
|
||||
|
||||
public function getRemovedNodeCount(): int
|
||||
{
|
||||
return $this->removedNodesCollector->getCount();
|
||||
}
|
||||
|
||||
public function addFileDiff(SmartFileInfo $smartFileInfo, string $newContent, string $oldContent): void
|
||||
{
|
||||
if ($newContent === $oldContent) {
|
||||
|
@ -29,6 +29,7 @@ final class ConsoleOutputFormatter implements OutputFormatterInterface
|
||||
{
|
||||
$this->reportFileDiffs($errorAndDiffCollector->getFileDiffs());
|
||||
$this->reportErrors($errorAndDiffCollector->getErrors());
|
||||
$this->reportRemovedFilesAndNodes($errorAndDiffCollector);
|
||||
|
||||
if ($errorAndDiffCollector->getErrors() !== []) {
|
||||
return;
|
||||
@ -100,4 +101,17 @@ final class ConsoleOutputFormatter implements OutputFormatterInterface
|
||||
$this->symfonyStyle->error($message);
|
||||
}
|
||||
}
|
||||
|
||||
private function reportRemovedFilesAndNodes(ErrorAndDiffCollector $errorAndDiffCollector): void
|
||||
{
|
||||
if ($errorAndDiffCollector->getRemovedAndAddedFilesCount()) {
|
||||
$this->symfonyStyle->note(
|
||||
sprintf('%d files were added/removed', $errorAndDiffCollector->getRemovedAndAddedFilesCount())
|
||||
);
|
||||
}
|
||||
|
||||
if ($errorAndDiffCollector->getRemovedNodeCount()) {
|
||||
$this->symfonyStyle->note(sprintf('%d nodes were removed', $errorAndDiffCollector->getRemovedNodeCount()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ final class JsonOutputFormatter implements OutputFormatterInterface
|
||||
'totals' => [
|
||||
'changed_files' => count($fileDiffs),
|
||||
'removed_and_added_files_count' => $errorAndDiffCollector->getRemovedAndAddedFilesCount(),
|
||||
'removed_node_count' => $errorAndDiffCollector->getRemovedNodeCount(),
|
||||
],
|
||||
];
|
||||
|
||||
|
@ -51,7 +51,7 @@ abstract class AbstractRector extends NodeVisitorAbstract implements PhpRectorIn
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function setAbstractRectorDependencies(
|
||||
public function autowireAbstractRectorDependencies(
|
||||
SymfonyStyle $symfonyStyle,
|
||||
RemovedAndAddedFilesCollector $removedAndAddedFilesCollector,
|
||||
PhpVersionProvider $phpVersionProvider,
|
||||
|
@ -10,6 +10,7 @@ use Rector\PhpParser\Node\Commander\NodeAddingCommander;
|
||||
use Rector\PhpParser\Node\Commander\NodeRemovingCommander;
|
||||
use Rector\PhpParser\Node\Commander\PropertyAddingCommander;
|
||||
use Rector\PhpParser\Node\VariableInfo;
|
||||
use Rector\Reporting\RemovedNodesCollector;
|
||||
|
||||
/**
|
||||
* This could be part of @see AbstractRector, but decopuling to trait
|
||||
@ -39,19 +40,26 @@ trait NodeCommandersTrait
|
||||
*/
|
||||
private $useAddingCommander;
|
||||
|
||||
/**
|
||||
* @var RemovedNodesCollector
|
||||
*/
|
||||
private $removedNodesCollector;
|
||||
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function setRequiredCommanders(
|
||||
public function autowireNodeCommandersTrait(
|
||||
NodeRemovingCommander $nodeRemovingCommander,
|
||||
NodeAddingCommander $nodeAddingCommander,
|
||||
PropertyAddingCommander $propertyAddingCommander,
|
||||
UseAddingCommander $useAddingCommander
|
||||
UseAddingCommander $useAddingCommander,
|
||||
RemovedNodesCollector $removedNodesCollector
|
||||
): void {
|
||||
$this->nodeRemovingCommander = $nodeRemovingCommander;
|
||||
$this->nodeAddingCommander = $nodeAddingCommander;
|
||||
$this->propertyAddingCommander = $propertyAddingCommander;
|
||||
$this->useAddingCommander = $useAddingCommander;
|
||||
$this->removedNodesCollector = $removedNodesCollector;
|
||||
}
|
||||
|
||||
protected function addNodeAfterNode(Node $newNode, Node $positionNode): void
|
||||
@ -81,6 +89,8 @@ trait NodeCommandersTrait
|
||||
$this->nodeRemovingCommander->addNode($node);
|
||||
|
||||
$this->notifyNodeChangeFileInfo($node);
|
||||
|
||||
$this->removedNodesCollector->collect($node);
|
||||
}
|
||||
|
||||
protected function isNodeRemoved(Node $node): bool
|
||||
|
23
src/Reporting/RemovedNodesCollector.php
Normal file
23
src/Reporting/RemovedNodesCollector.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Rector\Reporting;
|
||||
|
||||
use PhpParser\Node;
|
||||
|
||||
final class RemovedNodesCollector
|
||||
{
|
||||
/**
|
||||
* @var Node[]
|
||||
*/
|
||||
private $removedNodes = [];
|
||||
|
||||
public function collect(Node $node): void
|
||||
{
|
||||
$this->removedNodes[] = $node;
|
||||
}
|
||||
|
||||
public function getCount(): int
|
||||
{
|
||||
return count($this->removedNodes);
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
namespace Rector\Testing\PHPUnit;
|
||||
|
||||
use Nette\Utils\FileSystem;
|
||||
use PHPStan\Analyser\NodeScopeResolver;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Rector\Application\FileProcessor;
|
||||
use Rector\Configuration\Option;
|
||||
@ -45,6 +46,11 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
*/
|
||||
private static $allRectorContainer;
|
||||
|
||||
/**
|
||||
* @var NodeScopeResolver
|
||||
*/
|
||||
private $nodeScopeResolver;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->fixtureSplitter = new FixtureSplitter($this->getTempPath());
|
||||
@ -79,6 +85,9 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
|
||||
$this->fileProcessor = static::$container->get(FileProcessor::class);
|
||||
$this->parameterProvider = static::$container->get(ParameterProvider::class);
|
||||
|
||||
// needed for PHPStan, because the analyzed file is just create in /temp
|
||||
$this->nodeScopeResolver = static::$container->get(NodeScopeResolver::class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -123,6 +132,9 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
$smartFileInfo,
|
||||
$this->autoloadTestFixture
|
||||
);
|
||||
|
||||
$this->nodeScopeResolver->setAnalysedFiles([$originalFile]);
|
||||
|
||||
$this->doTestFileMatchesExpectedContent($originalFile, $changedFile, $smartFileInfo->getRealPath());
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user