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();
}
}