diff --git a/Inline.php b/Inline.php index b6dc26be..9d6c3c5c 100644 --- a/Inline.php +++ b/Inline.php @@ -353,11 +353,18 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, ++$i; // [foo, bar, ...] + $lastToken = null; while ($i < $len) { if (']' === $sequence[$i]) { return $output; } if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + if (',' === $sequence[$i] && (null === $lastToken || 'separator' === $lastToken)) { + $output[] = null; + } elseif (',' === $sequence[$i]) { + $lastToken = 'separator'; + } + ++$i; continue; @@ -401,6 +408,7 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, $output[] = $value; + $lastToken = 'value'; ++$i; } diff --git a/Tests/InlineTest.php b/Tests/InlineTest.php index 983e1f32..17e0ed79 100644 --- a/Tests/InlineTest.php +++ b/Tests/InlineTest.php @@ -1140,4 +1140,11 @@ public function testParseQuotedReferenceLikeStringsInSequence() $this->assertSame(['&foo', '&bar', '&baz'], Inline::parse($yaml)); } + + public function testParseSequenceWithEmptyElement() + { + $this->assertSame(['foo', null, 'bar'], Inline::parse('[foo, , bar]')); + $this->assertSame([null, 'foo', 'bar'], Inline::parse('[, foo, bar]')); + $this->assertSame(['foo', 'bar'], Inline::parse('[foo, bar, ]')); + } }