X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fpsy%2Fpsysh%2Fsrc%2FPsy%2FCommand%2FWtfCommand.php;h=2e5c00ce14e108384ba2c3fdb25c6eb5aeb06dcb;hp=7e3d08d1f7520fe109faa0e5d8938ed769601b7f;hb=eba34333e3c89f208d2f72fa91351ad019a71583;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae diff --git a/vendor/psy/psysh/src/Psy/Command/WtfCommand.php b/vendor/psy/psysh/src/Psy/Command/WtfCommand.php index 7e3d08d1f..2e5c00ce1 100644 --- a/vendor/psy/psysh/src/Psy/Command/WtfCommand.php +++ b/vendor/psy/psysh/src/Psy/Command/WtfCommand.php @@ -13,6 +13,7 @@ namespace Psy\Command; use Psy\Context; use Psy\ContextAware; +use Psy\Input\FilterOptions; use Psy\Output\ShellOutput; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -46,12 +47,18 @@ class WtfCommand extends TraceCommand implements ContextAware */ protected function configure() { + list($grep, $insensitive, $invert) = FilterOptions::getOptions(); + $this ->setName('wtf') ->setAliases(array('last-exception', 'wtf?')) ->setDefinition(array( new InputArgument('incredulity', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'Number of lines to show'), - new InputOption('verbose', 'v', InputOption::VALUE_NONE, 'Show entire backtrace.'), + new InputOption('all', 'a', InputOption::VALUE_NONE, 'Show entire backtrace.'), + + $grep, + $insensitive, + $invert, )) ->setDescription('Show the backtrace of the most recent exception.') ->setHelp( @@ -64,7 +71,7 @@ e.g. >>> wtf ? >>> wtf ?!???!?!? -To see the entire backtrace, pass the -v/--verbose flag: +To see the entire backtrace, pass the -a/--all flag: e.g. >>> wtf -v @@ -72,40 +79,47 @@ HELP ); } - /** - * {@inheritdoc} - * - * --verbose is not hidden for this option :) - * - * @return array - */ - protected function getHiddenOptions() - { - $options = parent::getHiddenOptions(); - unset($options[array_search('verbose', $options)]); - - return $options; - } - /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { + $this->filter->bind($input); + $incredulity = implode('', $input->getArgument('incredulity')); if (strlen(preg_replace('/[\\?!]/', '', $incredulity))) { throw new \InvalidArgumentException('Incredulity must include only "?" and "!".'); } $exception = $this->context->getLastException(); - $count = $input->getOption('verbose') ? PHP_INT_MAX : pow(2, max(0, (strlen($incredulity) - 1))); - $trace = $this->getBacktrace($exception, $count); + $count = $input->getOption('all') ? PHP_INT_MAX : max(3, pow(2, strlen($incredulity) + 1)); $shell = $this->getApplication(); - $output->page(function ($output) use ($exception, $trace, $shell) { - $shell->renderException($exception, $output); + $output->startPaging(); + do { + $traceCount = count($exception->getTrace()); + $showLines = $count; + // Show the whole trace if we'd only be hiding a few lines + if ($traceCount < max($count * 1.2, $count + 2)) { + $showLines = PHP_INT_MAX; + } + + $trace = $this->getBacktrace($exception, $showLines); + $moreLines = $traceCount - count($trace); + + $output->writeln($shell->formatException($exception)); $output->writeln('--'); $output->write($trace, true, ShellOutput::NUMBER_LINES); - }); + $output->writeln(''); + + if ($moreLines > 0) { + $output->writeln(sprintf( + '', + $moreLines + )); + $output->writeln(''); + } + } while ($exception = $exception->getPrevious()); + $output->stopPaging(); } }