From f41a3a63514f735ff7093af9dda275c022c8c681 Mon Sep 17 00:00:00 2001 From: Netkas Date: Fri, 16 Dec 2022 03:08:04 -0500 Subject: [PATCH] Improved exception display --- src/ncc/Utilities/Console.php | 20 +++++++++++++++++--- src/ncc/Utilities/Functions.php | 5 +++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/ncc/Utilities/Console.php b/src/ncc/Utilities/Console.php index c492611..27710eb 100644 --- a/src/ncc/Utilities/Console.php +++ b/src/ncc/Utilities/Console.php @@ -11,6 +11,7 @@ use ncc\ncc; use ncc\Objects\CliHelpSection; use ncc\ThirdParty\Symfony\Process\ExecutableFinder; + use Throwable; class Console { @@ -317,16 +318,20 @@ * Prints out a detailed exception display (unfinished) * * @param Exception $e + * @param bool $sub * @return void */ - private static function outExceptionDetails(Exception $e): void + private static function outExceptionDetails(Throwable $e, bool $sub=false): void { if(!ncc::cliMode()) return; + // Exception name without namespace + $trace_header = self::formatColor($e->getFile() . ':' . $e->getLine(), ConsoleColors::Magenta); - $trace_error = self::formatColor('error: ', ConsoleColors::Red); + $trace_error = self::formatColor( 'Error: ', ConsoleColors::Red); self::out($trace_header . ' ' . $trace_error . $e->getMessage()); + self::out(sprintf('Exception: %s', get_class($e))); self::out(sprintf('Error code: %s', $e->getCode())); $trace = $e->getTrace(); if(count($trace) > 1) @@ -338,7 +343,16 @@ } } - if(Main::getArgs() !== null) + if($e->getPrevious() !== null) + { + // Check if previous is the same as the current + if($e->getPrevious()->getMessage() !== $e->getMessage()) + { + self::outExceptionDetails($e->getPrevious(), true); + } + } + + if(Main::getArgs() !== null && !$sub) { if(isset(Main::getArgs()['dbg-ex'])) { diff --git a/src/ncc/Utilities/Functions.php b/src/ncc/Utilities/Functions.php index 381e8d6..928114c 100644 --- a/src/ncc/Utilities/Functions.php +++ b/src/ncc/Utilities/Functions.php @@ -36,6 +36,7 @@ use ncc\ThirdParty\jelix\Version\Parser; use ncc\ThirdParty\Symfony\Filesystem\Filesystem; use PharData; + use Throwable; use ZipArchive; /** @@ -290,7 +291,7 @@ * @param Exception $e * @return array */ - public static function exceptionToArray(Exception $e): array + public static function exceptionToArray(Throwable $e): array { $exception = [ 'message' => $e->getMessage(), @@ -303,7 +304,7 @@ if($e->getPrevious() !== null) { - $exception['trace'] = self::exceptionToArray($e); + $exception['previous'] = self::exceptionToArray($e->getPrevious()); } return $exception;