/** * @param \Pvra\Result\Collection $results * @param \Symfony\Component\Console\Output\OutputInterface $out * @param \Symfony\Component\Console\Input\InputInterface $in */ protected function renderResultCollectionByRequiredVersion(Collection $results, OutputInterface $out, InputInterface $in) { $highestRequirement = $results->getHighestDemandingResult(); if ($highestRequirement === null) { // @codeCoverageIgnoreStart throw new RuntimeException('Detection of requirements failed. Unknown error.'); // @codeCoverageIgnoreEnd } $out->write(['Highest required version is PHP ', $highestRequirement->getRequiredVersion(), ' in ', $highestRequirement->getAnalysisTargetId(), $results->count() > 1 ? ' and others' : '', PHP_EOL]); $out->writeln(''); $usedVersions = []; /** @var AnalysisResult $result */ foreach ($results as $result) { $versions = array_keys($result->getRequirements()); foreach ($versions as $version) { $usedVersions[$version] = $version; } } usort($usedVersions, function ($a, $b) { return version_compare($b, $a); }); $table = new Table($out); $table->setHeaders(['Version', 'Message', 'Position']); foreach ($usedVersions as $index => $version) { /** @var AnalysisResult $result */ foreach ($results as $result) { $selectedResults = $result->getRequirementInfo($version); if (!empty($selectedResults)) { foreach ($selectedResults as $reason) { $table->addRow([$version, $reason['msg'], $this->formatOutputPath($reason['targetId']) . ':' . $reason['line']]); } } } if (isset($usedVersions[$index + 1])) { // there is a row after this one $table->addRow(new TableSeparator()); } } $table->render(); }