Security update for Core, with self-updated composer
[yaffs-website] / vendor / symfony / config / Definition / Dumper / YamlReferenceDumper.php
index 31c3f8e0161fc26737633856847ecbbac1be7fc0..a474249380914bf3c013bf57ac9ea739877d37f6 100644 (file)
@@ -16,6 +16,7 @@ use Symfony\Component\Config\Definition\NodeInterface;
 use Symfony\Component\Config\Definition\ArrayNode;
 use Symfony\Component\Config\Definition\EnumNode;
 use Symfony\Component\Config\Definition\PrototypedArrayNode;
+use Symfony\Component\Config\Definition\ScalarNode;
 use Symfony\Component\Yaml\Inline;
 
 /**
@@ -45,8 +46,9 @@ class YamlReferenceDumper
     /**
      * @param NodeInterface $node
      * @param int           $depth
+     * @param bool          $prototypedArray
      */
-    private function writeNode(NodeInterface $node, $depth = 0)
+    private function writeNode(NodeInterface $node, $depth = 0, $prototypedArray = false)
     {
         $comments = array();
         $default = '';
@@ -59,29 +61,7 @@ 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) {
@@ -125,7 +105,8 @@ class YamlReferenceDumper
         $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('');
@@ -159,7 +140,7 @@ class YamlReferenceDumper
 
         if ($children) {
             foreach ($children as $childNode) {
-                $this->writeNode($childNode, $depth + 1);
+                $this->writeNode($childNode, $depth + 1, $node instanceof PrototypedArrayNode && !$node->getKeyAttribute());
             }
         }
     }
@@ -200,4 +181,44 @@ class YamlReferenceDumper
             }
         }
     }
+
+    /**
+     * @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);
+    }
 }