![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/codeception/codeception/src/Codeception/Util/ |
<?php declare(strict_types=1); namespace Codeception\Util; use Throwable; class StackTraceFilter { protected static array $filteredClassesPattern = [ 'Symfony\Component\Console', 'Codeception\Command\\', 'Codeception\TestCase\\', ]; public static function getFilteredStackTrace(Throwable $e, bool $asString = true, bool $filter = true): array|string { $stackTrace = $asString ? '' : []; $trace = $e->getPrevious() ? $e->getPrevious()->getTrace() : $e->getTrace(); $eFile = $e->getFile(); $eLine = $e->getLine(); if (!self::frameExists($trace, $eFile, $eLine)) { array_unshift( $trace, ['file' => $eFile, 'line' => $eLine] ); } foreach ($trace as $step) { if (self::classIsFiltered($step) and $filter) { continue; } if (self::fileIsFiltered($step) and $filter) { continue; } if (!$asString) { $stackTrace[] = $step; continue; } if (!isset($step['file'])) { continue; } $stackTrace .= $step['file'] . ':' . $step['line'] . "\n"; } return $stackTrace; } protected static function classIsFiltered(array $step): bool { if (!isset($step['class'])) { return false; } $className = $step['class']; foreach (self::$filteredClassesPattern as $filteredClassName) { if (str_starts_with($className, $filteredClassName)) { return true; } } return false; } protected static function fileIsFiltered(array $step): bool { if (!isset($step['file'])) { return false; } if (str_contains($step['file'], 'codecept.phar/')) { return true; } if (str_contains($step['file'], 'vendor' . DIRECTORY_SEPARATOR . 'phpunit')) { return true; } if (str_contains($step['file'], 'vendor' . DIRECTORY_SEPARATOR . 'codeception')) { return true; } $modulePath = 'src' . DIRECTORY_SEPARATOR . 'Codeception' . DIRECTORY_SEPARATOR . 'Module'; if (str_contains($step['file'], $modulePath)) { return false; // don`t filter modules } if (str_contains($step['file'], 'src' . DIRECTORY_SEPARATOR . 'Codeception' . DIRECTORY_SEPARATOR)) { return true; } return false; } private static function frameExists(array $trace, string $file, int $line): bool { foreach ($trace as $frame) { if ( isset($frame['file']) && $frame['file'] == $file && isset($frame['line']) && $frame['line'] == $line ) { return true; } } return false; } }