8000 [Config] Fix `YamlReferenceDumper` handling of array examples · symfony/symfony@48af43b · GitHub
[go: up one dir, main page]

Skip to content

Commit 48af43b

Browse files
committed
[Config] Fix YamlReferenceDumper handling of array examples
1 parent afc658d commit 48af43b

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

src/Symfony/Component/Config/Definition/Dumper/YamlReferenceDumper.php

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,12 @@ private function writeNode(NodeInterface $node, ?NodeInterface $parentNode = nul
9090
$children = $this->getPrototypeChildren($node);
9191
}
9292

93-
if (!$children) {
94-
if ($node->hasDefaultValue() && \count($defaultArray = $node->getDefaultValue())) {
95-
$default = '';
96-
} elseif (!\is_array($example)) {
97-
$default = '[]';
98-
}
93+
if (!$children && !($node->hasDefaultValue() && \count($defaultArray = $node->getDefaultValue()))) {
94+
$default = '[]';
9995
}
10096
} elseif ($node instanceof EnumNode) {
10197
$comments[] = 'One of '.implode('; ', array_map('json_encode', $node->getValues()));
10298
$default = $node->hasDefaultValue() ? Inline::dump($node->getDefaultValue()) : '~';
103-
} elseif (VariableNode::class === \get_class($node) && \is_array($example)) {
104-
// If there is an array example, we are sure we dont need to print a default value
105-
$default = '';
10699
} else {
107100
$default = '~';
108101

@@ -170,7 +163,7 @@ private function writeNode(NodeInterface $node, ?NodeInterface $parentNode = nul
170163

171164
$this->writeLine('# '.$message.':', $depth * 4 + 4);
172165

173-
$this->writeArray(array_map([Inline::class, 'dump'], $example), $depth + 1);
166+
$this->writeArray(array_map([Inline::class, 'dump'], $example), $depth + 1, true);
174167
}
175168

176169
if ($children) {
@@ -191,7 +184,7 @@ private function writeLine(string $text, int $indent = 0)
191184
$this->reference .= sprintf($format, $text)."\n";
192185
}
193186

194-
private function writeArray(array $array, int $depth)
187+
private function writeArray(array $array, int $depth, bool $asComment = false)
195188
{
196189
$isIndexed = array_values($array) === $array;
197190

@@ -202,14 +195,16 @@ private function writeArray(array $array, int $depth)
202195
$val = $value;
203196
}
204197

198+
$prefix = $asComment ? '# ' : '';
199+
205200
if ($isIndexed) {
206-
$this->writeLine('- '.$val, $depth * 4);
201+
$this->writeLine($prefix.'- '.$val, $depth * 4);
207202
} else {
208-
$this->writeLine(sprintf('%-20s %s', $key.':', $val), $depth * 4);
203+
$this->writeLine(sprintf('%s%-20s %s', $prefix, $key.':', $val), $depth * 4);
209204
}
210205

211206
if (\is_array($value)) {
212-
$this->writeArray($value, $depth + 1);
207+
$this->writeArray($value, $depth + 1, $asComment);
213208
}
214209
}
215210
}

src/Symfony/Component/Config/Tests/Definition/Dumper/YamlReferenceDumperTest.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,11 @@ enum: ~ # One of "this"; "that"
114114
# which should be indented
115115
child3: ~ # Example: 'example setting'
116116
scalar_prototyped: []
117-
variable:
117+
variable: ~
118118
119119
# Examples:
120-
- foo
121-
- bar
120+
# - foo
121+
# - bar
122122
parameters:
123123
124124
# Prototype: Parameter name
@@ -142,6 +142,11 @@ enum: ~ # One of "this"; "that"
142142
143143
# Prototype
144144
name: []
145+
array_with_array_example_and_no_default_value: []
146+
147+
# Examples:
148+
# - foo
149+
# - bar
145150
custom_node: true
146151

147152
EOL;

src/Symfony/Component/Config/Tests/Fixtures/Configuration/ExampleConfiguration.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ public function getConfigTreeBuilder(): TreeBuilder
9696
->end()
9797
->end()
9898
->end()
99+
->arrayNode('array_with_array_example_and_no_default_value')
100+
->example(['foo', 'bar'])
101+
->end()
99102
->append(new CustomNodeDefinition('acme'))
100103
->end()
101104
;

0 commit comments

Comments
 (0)
0