mirror of
https://github.com/pestphp/pest.git
synced 2026-03-11 18:27:23 +01:00
feat: improves --coverage output
This commit is contained in:
@ -10,9 +10,9 @@ use SebastianBergmann\CodeCoverage\Node\Directory;
|
|||||||
use SebastianBergmann\CodeCoverage\Node\File;
|
use SebastianBergmann\CodeCoverage\Node\File;
|
||||||
use SebastianBergmann\Environment\Runtime;
|
use SebastianBergmann\Environment\Runtime;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Console\Terminal;
|
|
||||||
use function Termwind\render;
|
use function Termwind\render;
|
||||||
use function Termwind\renderUsing;
|
use function Termwind\renderUsing;
|
||||||
|
use function Termwind\terminal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -83,10 +83,6 @@ final class Coverage
|
|||||||
$codeCoverage = require $reportPath;
|
$codeCoverage = require $reportPath;
|
||||||
unlink($reportPath);
|
unlink($reportPath);
|
||||||
|
|
||||||
$totalWidth = (new Terminal())->getWidth();
|
|
||||||
|
|
||||||
$dottedLineLength = $totalWidth - 6;
|
|
||||||
|
|
||||||
$totalCoverage = $codeCoverage->getReport()->percentageOfExecutedLines();
|
$totalCoverage = $codeCoverage->getReport()->percentageOfExecutedLines();
|
||||||
|
|
||||||
/** @var Directory<File|Directory> $report */
|
/** @var Directory<File|Directory> $report */
|
||||||
@ -103,36 +99,24 @@ final class Coverage
|
|||||||
$dirname,
|
$dirname,
|
||||||
$basename,
|
$basename,
|
||||||
]);
|
]);
|
||||||
$rawName = $dirname === '.' ? $basename : implode(DIRECTORY_SEPARATOR, [
|
|
||||||
$dirname,
|
|
||||||
$basename,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$linesExecutedTakenSize = 0;
|
|
||||||
|
|
||||||
if ($file->percentageOfExecutedLines()->asString() != '0.00%') {
|
|
||||||
$linesExecutedTakenSize = strlen($uncoveredLines = trim(implode(', ', self::getMissingCoverage($file)))) + 1;
|
|
||||||
$name .= sprintf(' <fg=red>%s</>', $uncoveredLines);
|
|
||||||
}
|
|
||||||
|
|
||||||
$percentage = $file->numberOfExecutableLines() === 0
|
$percentage = $file->numberOfExecutableLines() === 0
|
||||||
? '100.0'
|
? '100.0'
|
||||||
: number_format($file->percentageOfExecutedLines()->asFloat(), 1, '.', '');
|
: number_format($file->percentageOfExecutedLines()->asFloat(), 1, '.', '');
|
||||||
|
|
||||||
$takenSize = strlen($rawName.$percentage) + 2 + $linesExecutedTakenSize; // adding 3 space and percent sign
|
$color = $percentage === '100.0' ? 'green' : ($percentage === '0.0' ? 'red' : 'yellow');
|
||||||
|
|
||||||
$percentage = sprintf(
|
$truncateAt = max(1, terminal()->width() - 12);
|
||||||
'<fg=%s>%s</>',
|
|
||||||
$percentage === '100.0' ? 'green' : ($percentage === '0.0' ? 'red' : 'yellow'),
|
renderUsing($output);
|
||||||
$percentage
|
render(<<<HTML
|
||||||
);
|
<div class="flex mx-2">
|
||||||
|
<span class="truncate-{$truncateAt}">{$name}</span>
|
||||||
|
<span class="flex-1 content-repeat-[.] text-gray mx-1"></span>
|
||||||
|
<span class="text-{$color}">{$percentage}%</span>
|
||||||
|
</div>
|
||||||
|
HTML);
|
||||||
|
|
||||||
$output->writeln(sprintf(
|
|
||||||
' %s <fg=gray>%s</> %s <fg=gray>%%</>',
|
|
||||||
$name,
|
|
||||||
str_repeat('.', max($dottedLineLength - $takenSize, 1)),
|
|
||||||
$percentage
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$totalCoverageAsString = $totalCoverage->asFloat() === 0.0
|
$totalCoverageAsString = $totalCoverage->asFloat() === 0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user