-
-
Notifications
You must be signed in to change notification settings - Fork 737
Closed
rectorphp/rector-src
#4629Description
rector: v0.17
Reproduction:
Try to refactor the following code with Rector:
/**
* @throws Throwable
*/
public function show(Category $category, Request $request): View|RedirectResponse|EntityCollection
{
$this->type = match (request('type')) {
'multimedia' => 'multimedia',
default => 'news'
};
$not_published_news_in_category = $category
->news()
->select(['news.id'])
->notPublished()
->orderBy('news.created_at', 'desc')
->toBase()
->get(250)
->pluck('id')
->toArray();
$not_published_multimedia_in_category = $category
->multimedia()
->select(['multimedia.id'])
->notPublished()
->orderBy('multimedia.created_at', 'desc')
->toBase()
->get(250)
->pluck('id')
->toArray();
$topEntities = rescue(fn (): Collection => Categorizable::query()
->select(['id', 'order', 'categorizable_id', 'categorizable_type'])
->where('category_id', $category->id)
->where(function (Builder $query) use (
&$not_published_multimedia_in_category,
&$not_published_news_in_category
): void {
$query->where(function (Builder $query) use (&$not_published_news_in_category): void {
$query->where('categorizable_type', array_search(News::class, Relation::morphMap(), true));
$query->whereIntegerNotInRaw('categorizable_id', $not_published_news_in_category);
});
$query->orWhere(function (Builder $query) use (&$not_published_multimedia_in_category): void {
$query->where('categorizable_type', array_search(Multimedia::class, Relation::morphMap(), true));
$query->whereIntegerNotInRaw('categorizable_id', $not_published_multimedia_in_category);
});
})
->orderByRaw('ISNULL(`order`), `order` ASC')
->orderBy('created_at', 'desc')
->take(3)
->get()
->transform(function (Categorizable $item): ?Model {
$entityType = Relation::getMorphedModel($item['categorizable_type']);
$entity = match ($entityType) {
News::class => News::query()
->select(columns: array_map(fn ($item) => "news.$item", HomeController::$columns))
->published()
->with('categories')
->withCount('allComments')
->firstWhere('id', $item['categorizable_id'])
?->setAttribute('order', $item['order']),
Multimedia::class => Multimedia::query()
->select(columns: [
...array_map(fn ($item) => "multimedia.$item", HomeController::$columns), 'multimedia.type',
])
->published()
->with('categories')
->withCount('allComments')
->firstWhere('id', $item['categorizable_id'])
?->setAttribute('order', $item['order']),
};
if ($entity instanceof Model) {
if (News::class === $entityType) {
$this->category_top_news_id[] = $entity['id'];
}
if (Multimedia::class === $entityType) {
$this->category_top_multimedia_id[] = $entity['id'];
}
}
return $entity;
}));
$items_builder = diligently(function () use (&$category, &$request): MorphToMany {
return match ($this->type) {
'multimedia' => $this->query($category->multimedia()),
default => $this->query($category->news()),
};
});
return match (request()->wantsJson()) {
true => new EntityCollection($items_builder->take(10)->get()),
default => view('categories.single', [
'category' => $category,
'items' => $items_builder->paginate(10),
'topEntities' => $topEntities,
])
};
}[ERROR] Could not process "/Users/home/www/ion/app/Http/Controllers/CategoryController.php" file, due to:
"System error: "Call to undefined method
Rector\Core\PhpParser\Printer\BetterStandardPrinter::pPHPStan_Node_AlwaysRememberedExpr()"
Stack trace:
#0 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(140):
PhpParser\PrettyPrinterAbstract->p(Object(PHPStan\Node\Expr\AlwaysRememberedExpr), false)
#1 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(579):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->p(Object(PHPStan\Node\Expr\AlwaysRememberedExpr))
#2 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(499):
PhpParser\PrettyPrinter\Standard->pExpr_Match(Object(PhpParser\Node\Expr\Match_))
#3 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(140):
PhpParser\PrettyPrinterAbstract->p(Object(PhpParser\Node\Expr\Match_), false)
#4 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(777):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->p(Object(PhpParser\Node\Expr\Match_))
#5 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(499):
PhpParser\PrettyPrinter\Standard->pStmt_Return(Object(PhpParser\Node\Stmt\Return_))
#6 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(140):
PhpParser\PrettyPrinterAbstract->p(Object(PhpParser\Node\Stmt\Return_), false)
#7 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(289):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->p(Object(PhpParser\Node\Stmt\Return_))
#8 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(306):
PhpParser\PrettyPrinterAbstract->pStmts(Array, true)
#9 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(575):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->pStmts(Array)
#10 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(247):
PhpParser\PrettyPrinter\Standard->pExpr_Closure(Object(PhpParser\Node\Expr\Closure))
#11 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(499):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->pExpr_Closure(Object(PhpParser\Node\Expr\Closure))
#12 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(140):
PhpParser\PrettyPrinterAbstract->p(Object(PhpParser\Node\Expr\Closure), false)
#13 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(25):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->p(Object(PhpParser\Node\Expr\Closure))
#14 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(499):
PhpParser\PrettyPrinter\Standard->pArg(Object(PhpParser\Node\Arg))
#15 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(140):
PhpParser\PrettyPrinterAbstract->p(Object(PhpParser\Node\Arg), false)
#16 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(377):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->p(Object(PhpParser\Node\Arg))
#17 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(391):
PhpParser\PrettyPrinterAbstract->pImplode(Array, ', ')
#18 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(362):
PhpParser\PrettyPrinterAbstract->pCommaSeparated(Array)
#19 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(943):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->pCommaSeparated(Array)
#20 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php(484):
PhpParser\PrettyPrinter\Standard->pMaybeMultiline(Array)
#21 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(499):
PhpParser\PrettyPrinter\Standard->pExpr_FuncCall(Object(PhpParser\Node\Expr\FuncCall))
#22 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(140):
PhpParser\PrettyPrinterAbstract->p(Object(PhpParser\Node\Expr\FuncCall), false)
#23 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(289):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->p(Object(PhpParser\Node\Expr\FuncCall))
#24 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(306):
PhpParser\PrettyPrinterAbstract->pStmts(Array, false)
#25 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php(203):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->pStmts(Array, false)
#26 vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php(119):
PhpParser\PrettyPrinterAbstract->prettyPrint(Array)
#27 vendor/rector/rector/src/PhpParser/Comparing/NodeComparator.php(33):
Rector\Core\PhpParser\Printer\BetterStandardPrinter->print(Array)
#28 vendor/rector/rector/src/PhpParser/Comparing/NodeComparator.php(52):
Rector\Core\PhpParser\Comparing\NodeComparator->printWithoutComments(Array)
#29 vendor/rector/rector/rules/DeadCode/Rector/Expression/SimplifyMirrorAssignRector.php(47):
Rector\Core\PhpParser\Comparing\NodeComparator->areNodesEqual(Object(PhpParser\Node\Expr\Variable),
Object(PhpParser\Node\Expr\FuncCall))
#30 vendor/rector/rector/src/Rector/AbstractRector.php(204):
Rector\DeadCode\Rector\Expression\SimplifyMirrorAssignRector->refactor(Object(PhpParser\Node\Stmt\Expression))
#31 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(176):
Rector\Core\Rector\AbstractRector->enterNode(Object(PhpParser\Node\Stmt\Expression))
#32 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray(Array)
#33 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\ClassMethod))
#34 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray(Array)
#35 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Class_))
#36 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray(Array)
#37 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Namespace_))
#38 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(85):
PhpParser\NodeTraverser->traverseArray(Array)
#39 vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php(43):
PhpParser\NodeTraverser->traverse(Array)
#40 vendor/rector/rector/src/Application/FileProcessor.php(44):
Rector\Core\PhpParser\NodeTraverser\RectorNodeTraverser->traverse(Array)
#41 vendor/rector/rector/src/Application/FileProcessor/PhpFileProcessor.php(108):
Rector\Core\Application\FileProcessor->refactor(Object(Rector\Core\ValueObject\Application\File))
#42 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(171):
Rector\Core\Application\FileProcessor\PhpFileProcessor->process(Object(Rector\Core\ValueObject\Application\Fil
e), Object(Rector\Core\ValueObject\Configuration))
#43 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(144):
Rector\Core\Application\ApplicationFileProcessor->processFile(Object(Rector\Core\ValueObject\Application\File)
, Array, Object(Rector\Core\ValueObject\Configuration))
#44 vendor/rector/rector/packages/Parallel/WorkerRunner.php(65):
Rector\Core\Application\ApplicationFileProcessor->processFiles(Array,
Object(Rector\Core\ValueObject\Configuration))
#45 vendor/rector/rector/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
Rector\Parallel\WorkerRunner->Rector\Parallel\{closure}(Array)
#46 vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php(117):
RectorPrefix202307\Evenement\EventEmitter->emit('data', Array)
#47 vendor/rector/rector/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
RectorPrefix202307\Clue\React\NDJson\Decoder->handleData(Array)
#48 vendor/rector/rector/vendor/react/stream/src/Util.php(62):
RectorPrefix202307\Evenement\EventEmitter->emit('data', Array)
#49 vendor/rector/rector/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
RectorPrefix202307\React\Stream\Util::RectorPrefix202307\React\Stream\{closure}('{"action":"main...')
#50 vendor/rector/rector/vendor/react/stream/src/DuplexResourceStream.php(154):
RectorPrefix202307\Evenement\EventEmitter->emit('data', Array)
#51 vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.php(201):
RectorPrefix202307\React\Stream\DuplexResourceStream->handleData(Resource id #2861)
#52 vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.php(173):
RectorPrefix202307\React\EventLoop\StreamSelectLoop->waitForStreamActivity(NULL)
#53 vendor/rector/rector/src/Console/Command/WorkerCommand.php(63):
RectorPrefix202307\React\EventLoop\StreamSelectLoop->run()
#54 vendor/rector/rector/vendor/symfony/console/Command/Command.php(325):
Rector\Core\Console\Command\WorkerCommand->execute(Object(RectorPrefix202307\Symfony\Component\Console\Input\A
rgvInput), Object(RectorPrefix202307\Symfony\Component\Console\Output\ConsoleOutput))
#55 vendor/rector/rector/vendor/symfony/console/Application.php(944):
RectorPrefix202307\Symfony\Component\Console\Command\Command->run(Object(RectorPrefix202307\Symfony\Component\
Console\Input\ArgvInput), Object(RectorPrefix202307\Symfony\Component\Console\Output\ConsoleOutput))
#56 vendor/rector/rector/vendor/symfony/console/Application.php(326):
RectorPrefix202307\Symfony\Component\Console\Application->doRunCommand(Object(Rector\Core\Console\Command\Work
erCommand), Object(RectorPrefix202307\Symfony\Component\Console\Input\ArgvInput),
Object(RectorPrefix202307\Symfony\Component\Console\Output\ConsoleOutput))
#57 vendor/rector/rector/src/Console/ConsoleApplication.php(54):
RectorPrefix202307\Symfony\Component\Console\Application->doRun(Object(RectorPrefix202307\Symfony\Component\Co
nsole\Input\ArgvInput), Object(RectorPrefix202307\Symfony\Component\Console\Output\ConsoleOutput))
#58 vendor/rector/rector/vendor/symfony/console/Application.php(212):
Rector\Core\Console\ConsoleApplication->doRun(Object(RectorPrefix202307\Symfony\Component\Console\Input\ArgvIn
put), Object(RectorPrefix202307\Symfony\Component\Console\Output\ConsoleOutput))
#59 vendor/rector/rector/bin/rector.php(132): RectorPrefix202307\Symfony\Component\Console\Application->run()
#60 vendor/rector/rector/bin/rector(5): require_once('/Users/mortexa/...')
#61 vendor/bin/rector(120): include('/Users/mortexa/...')
#62 {main}". On line: 499
Metadata
Metadata
Assignees
Labels
No labels