X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fconfig%2FDefinition%2FDumper%2FYamlReferenceDumper.php;h=fc5d20a2e70408d1423bd439b4adfcddf9f8f610;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=31c3f8e0161fc26737633856847ecbbac1be7fc0;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php index 31c3f8e01..fc5d20a2e 100644 --- a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php +++ b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php @@ -11,11 +11,12 @@ namespace Symfony\Component\Config\Definition\Dumper; -use Symfony\Component\Config\Definition\ConfigurationInterface; -use Symfony\Component\Config\Definition\NodeInterface; use Symfony\Component\Config\Definition\ArrayNode; +use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\Config\Definition\EnumNode; +use Symfony\Component\Config\Definition\NodeInterface; use Symfony\Component\Config\Definition\PrototypedArrayNode; +use Symfony\Component\Config\Definition\ScalarNode; use Symfony\Component\Yaml\Inline; /** @@ -32,6 +33,32 @@ class YamlReferenceDumper return $this->dumpNode($configuration->getConfigTreeBuilder()->buildTree()); } + public function dumpAtPath(ConfigurationInterface $configuration, $path) + { + $rootNode = $node = $configuration->getConfigTreeBuilder()->buildTree(); + + foreach (explode('.', $path) as $step) { + if (!$node instanceof ArrayNode) { + throw new \UnexpectedValueException(sprintf('Unable to find node at path "%s.%s"', $rootNode->getName(), $path)); + } + + /** @var NodeInterface[] $children */ + $children = $node instanceof PrototypedArrayNode ? $this->getPrototypeChildren($node) : $node->getChildren(); + + foreach ($children as $child) { + if ($child->getName() === $step) { + $node = $child; + + continue 2; + } + } + + throw new \UnexpectedValueException(sprintf('Unable to find node at path "%s.%s"', $rootNode->getName(), $path)); + } + + return $this->dumpNode($node); + } + public function dumpNode(NodeInterface $node) { $this->reference = ''; @@ -43,10 +70,12 @@ class YamlReferenceDumper } /** - * @param NodeInterface $node - * @param int $depth + * @param NodeInterface $node + * @param NodeInterface|null $parentNode + * @param int $depth + * @param bool $prototypedArray */ - private function writeNode(NodeInterface $node, $depth = 0) + private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, $depth = 0, $prototypedArray = false) { $comments = array(); $default = ''; @@ -59,35 +88,13 @@ class YamlReferenceDumper $children = $node->getChildren(); if ($node instanceof PrototypedArrayNode) { - $prototype = $node->getPrototype(); - - if ($prototype instanceof ArrayNode) { - $children = $prototype->getChildren(); - } - - // check for attribute as key - if ($key = $node->getKeyAttribute()) { - $keyNodeClass = 'Symfony\Component\Config\Definition\\'.($prototype instanceof ArrayNode ? 'ArrayNode' : 'ScalarNode'); - $keyNode = new $keyNodeClass($key, $node); - - $info = 'Prototype'; - if (null !== $prototype->getInfo()) { - $info .= ': '.$prototype->getInfo(); - } - $keyNode->setInfo($info); - - // add children - foreach ($children as $childNode) { - $keyNode->addChild($childNode); - } - $children = array($key => $keyNode); - } + $children = $this->getPrototypeChildren($node); } if (!$children) { - if ($node->hasDefaultValue() && count($defaultArray = $node->getDefaultValue())) { + if ($node->hasDefaultValue() && \count($defaultArray = $node->getDefaultValue())) { $default = ''; - } elseif (!is_array($example)) { + } elseif (!\is_array($example)) { $default = '[]'; } } @@ -100,10 +107,10 @@ class YamlReferenceDumper if ($node->hasDefaultValue()) { $default = $node->getDefaultValue(); - if (is_array($default)) { - if (count($defaultArray = $node->getDefaultValue())) { + if (\is_array($default)) { + if (\count($defaultArray = $node->getDefaultValue())) { $default = ''; - } elseif (!is_array($example)) { + } elseif (!\is_array($example)) { $default = '[]'; } } else { @@ -117,15 +124,21 @@ class YamlReferenceDumper $comments[] = 'Required'; } + // deprecated? + if ($node->isDeprecated()) { + $comments[] = sprintf('Deprecated (%s)', $node->getDeprecationMessage($node->getName(), $parentNode ? $parentNode->getPath() : $node->getPath())); + } + // example - if ($example && !is_array($example)) { + if ($example && !\is_array($example)) { $comments[] = 'Example: '.$example; } - $default = (string) $default != '' ? ' '.$default : ''; - $comments = count($comments) ? '# '.implode(', ', $comments) : ''; + $default = '' != (string) $default ? ' '.$default : ''; + $comments = \count($comments) ? '# '.implode(', ', $comments) : ''; - $text = rtrim(sprintf('%-21s%s %s', $node->getName().':', $default, $comments), ' '); + $key = $prototypedArray ? '-' : $node->getName().':'; + $text = rtrim(sprintf('%-21s%s %s', $key, $default, $comments), ' '); if ($info = $node->getInfo()) { $this->writeLine(''); @@ -140,17 +153,17 @@ class YamlReferenceDumper if ($defaultArray) { $this->writeLine(''); - $message = count($defaultArray) > 1 ? 'Defaults' : 'Default'; + $message = \count($defaultArray) > 1 ? 'Defaults' : 'Default'; $this->writeLine('# '.$message.':', $depth * 4 + 4); $this->writeArray($defaultArray, $depth + 1); } - if (is_array($example)) { + if (\is_array($example)) { $this->writeLine(''); - $message = count($example) > 1 ? 'Examples' : 'Example'; + $message = \count($example) > 1 ? 'Examples' : 'Example'; $this->writeLine('# '.$message.':', $depth * 4 + 4); @@ -159,7 +172,7 @@ class YamlReferenceDumper if ($children) { foreach ($children as $childNode) { - $this->writeNode($childNode, $depth + 1); + $this->writeNode($childNode, $node, $depth + 1, $node instanceof PrototypedArrayNode && !$node->getKeyAttribute()); } } } @@ -172,7 +185,7 @@ class YamlReferenceDumper */ private function writeLine($text, $indent = 0) { - $indent = strlen($text) + $indent; + $indent = \strlen($text) + $indent; $format = '%'.$indent.'s'; $this->reference .= sprintf($format, $text)."\n"; @@ -183,7 +196,7 @@ class YamlReferenceDumper $isIndexed = array_values($array) === $array; foreach ($array as $key => $value) { - if (is_array($value)) { + if (\is_array($value)) { $val = ''; } else { $val = $value; @@ -195,9 +208,49 @@ class YamlReferenceDumper $this->writeLine(sprintf('%-20s %s', $key.':', $val), $depth * 4); } - if (is_array($value)) { + if (\is_array($value)) { $this->writeArray($value, $depth + 1); } } } + + /** + * @param PrototypedArrayNode $node + * + * @return array + */ + private function getPrototypeChildren(PrototypedArrayNode $node) + { + $prototype = $node->getPrototype(); + $key = $node->getKeyAttribute(); + + // Do not expand prototype if it isn't an array node nor uses attribute as key + if (!$key && !$prototype instanceof ArrayNode) { + return $node->getChildren(); + } + + if ($prototype instanceof ArrayNode) { + $keyNode = new ArrayNode($key, $node); + $children = $prototype->getChildren(); + + if ($prototype instanceof PrototypedArrayNode && $prototype->getKeyAttribute()) { + $children = $this->getPrototypeChildren($prototype); + } + + // add children + foreach ($children as $childNode) { + $keyNode->addChild($childNode); + } + } else { + $keyNode = new ScalarNode($key, $node); + } + + $info = 'Prototype'; + if (null !== $prototype->getInfo()) { + $info .= ': '.$prototype->getInfo(); + } + $keyNode->setInfo($info); + + return array($key => $keyNode); + } }