Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2020 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Psy\TabCompletion\Matcher;

abstract class
AbstractDefaultParametersMatcher extends AbstractContextAwareMatcher
{
   
/**
     * @param \ReflectionParameter[] $reflectionParameters
     *
     * @return array
     */
   
public function getDefaultParameterCompletion(array $reflectionParameters)
    {
       
$parametersProcessed = [];

        foreach (
$reflectionParameters as $parameter) {
            if (!
$parameter->isDefaultValueAvailable()) {
                return [];
            }

           
$defaultValue = $this->valueToShortString($parameter->getDefaultValue());

           
$parametersProcessed[] = "\${$parameter->getName()} = $defaultValue";
        }

        if (empty(
$parametersProcessed)) {
            return [];
        }

        return [\
implode(', ', $parametersProcessed) . ')'];
    }

   
/**
     * Takes in the default value of a parameter and turns it into a
     *  string representation that fits inline.
     * This is not 100% true to the original (newlines are inlined, for example).
     *
     * @param mixed $value
     *
     * @return string
     */
   
private function valueToShortString($value)
    {
        if (!\
is_array($value)) {
            return \
json_encode($value);
        }

       
$chunks = [];
       
$chunksSequential = [];

       
$allSequential = true;

        foreach (
$value as $key => $item) {
           
$allSequential = $allSequential && \is_numeric($key) && $key === \count($chunksSequential);

           
$keyString  = $this->valueToShortString($key);
           
$itemString = $this->valueToShortString($item);

           
$chunks[] = "{$keyString} => {$itemString}";
           
$chunksSequential[] = $itemString;
        }

       
$chunksToImplode = $allSequential ? $chunksSequential : $chunks;

        return
'[' . \implode(', ', $chunksToImplode) . ']';
    }
}