Subversion-Projekte lars-tiefland.laravel_shop

Revision

Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
/*
4
 * This file is part of Psy Shell.
5
 *
6
 * (c) 2012-2022 Justin Hileman
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
 
12
namespace Psy\TabCompletion\Matcher;
13
 
14
abstract class AbstractDefaultParametersMatcher extends AbstractContextAwareMatcher
15
{
16
    /**
17
     * @param \ReflectionParameter[] $reflectionParameters
18
     *
19
     * @return array
20
     */
21
    public function getDefaultParameterCompletion(array $reflectionParameters): array
22
    {
23
        $parametersProcessed = [];
24
 
25
        foreach ($reflectionParameters as $parameter) {
26
            if (!$parameter->isDefaultValueAvailable()) {
27
                return [];
28
            }
29
 
30
            $defaultValue = $this->valueToShortString($parameter->getDefaultValue());
31
 
32
            $parametersProcessed[] = \sprintf('$%s = %s', $parameter->getName(), $defaultValue);
33
        }
34
 
35
        if (empty($parametersProcessed)) {
36
            return [];
37
        }
38
 
39
        return [\implode(', ', $parametersProcessed).')'];
40
    }
41
 
42
    /**
43
     * Takes in the default value of a parameter and turns it into a
44
     *  string representation that fits inline.
45
     * This is not 100% true to the original (newlines are inlined, for example).
46
     *
47
     * @param mixed $value
48
     *
49
     * @return string
50
     */
51
    private function valueToShortString($value): string
52
    {
53
        if (!\is_array($value)) {
54
            return \json_encode($value);
55
        }
56
 
57
        $chunks = [];
58
        $chunksSequential = [];
59
 
60
        $allSequential = true;
61
 
62
        foreach ($value as $key => $item) {
63
            $allSequential = $allSequential && \is_numeric($key) && $key === \count($chunksSequential);
64
 
65
            $keyString = $this->valueToShortString($key);
66
            $itemString = $this->valueToShortString($item);
67
 
68
            $chunks[] = "{$keyString} => {$itemString}";
69
            $chunksSequential[] = $itemString;
70
        }
71
 
72
        $chunksToImplode = $allSequential ? $chunksSequential : $chunks;
73
 
74
        return '['.\implode(', ', $chunksToImplode).']';
75
    }
76
}