+++ /dev/null
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2017 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 = array();
-
- foreach ($reflectionParameters as $parameter) {
- if (!$parameter->isDefaultValueAvailable()) {
- return array();
- }
-
- $defaultValue = $this->valueToShortString($parameter->getDefaultValue());
-
- $parametersProcessed[] = "\${$parameter->getName()} = $defaultValue";
- }
-
- if (empty($parametersProcessed)) {
- return array();
- }
-
- return array(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 = array();
- $chunksSequential = array();
-
- $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) . ']';
- }
-}