X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fpsy%2Fpsysh%2Fsrc%2FCommand%2FListCommand%2FVariableEnumerator.php;fp=vendor%2Fpsy%2Fpsysh%2Fsrc%2FCommand%2FListCommand%2FVariableEnumerator.php;h=257ceac535639a50f4cc3f49ef69d9dfa24bc5f1;hp=0000000000000000000000000000000000000000;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php new file mode 100644 index 000000000..257ceac53 --- /dev/null +++ b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php @@ -0,0 +1,137 @@ +context = $context; + parent::__construct($presenter); + } + + /** + * {@inheritdoc} + */ + protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null) + { + // only list variables when no Reflector is present. + if ($reflector !== null || $target !== null) { + return; + } + + // only list variables if we are specifically asked + if (!$input->getOption('vars')) { + return; + } + + $showAll = $input->getOption('all'); + $variables = $this->prepareVariables($this->getVariables($showAll)); + + if (empty($variables)) { + return; + } + + return [ + 'Variables' => $variables, + ]; + } + + /** + * Get scope variables. + * + * @param bool $showAll Include special variables (e.g. $_) + * + * @return array + */ + protected function getVariables($showAll) + { + $scopeVars = $this->context->getAll(); + uksort($scopeVars, function ($a, $b) { + $aIndex = array_search($a, self::$specialNames); + $bIndex = array_search($b, self::$specialNames); + + if ($aIndex !== false) { + if ($bIndex !== false) { + return $aIndex - $bIndex; + } + + return 1; + } + + if ($bIndex !== false) { + return -1; + } + + return strnatcasecmp($a, $b); + }); + + $ret = []; + foreach ($scopeVars as $name => $val) { + if (!$showAll && in_array($name, self::$specialNames)) { + continue; + } + + $ret[$name] = $val; + } + + return $ret; + } + + /** + * Prepare formatted variable array. + * + * @param array $variables + * + * @return array + */ + protected function prepareVariables(array $variables) + { + // My kingdom for a generator. + $ret = []; + foreach ($variables as $name => $val) { + if ($this->showItem($name)) { + $fname = '$' . $name; + $ret[$fname] = [ + 'name' => $fname, + 'style' => in_array($name, self::$specialNames) ? self::IS_PRIVATE : self::IS_PUBLIC, + 'value' => $this->presentRef($val), + ]; + } + } + + return $ret; + } +}