Primo Committ
This commit is contained in:
76
vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
vendored
Normal file
76
vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Psy Shell.
|
||||
*
|
||||
* (c) 2012-2022 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): array
|
||||
{
|
||||
$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): string
|
||||
{
|
||||
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).']';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user