feature #32669 [Yaml] Add flag to dump NULL as ~ (OskarStark)
This PR was merged into the 4.4 branch.
Discussion
----------
[Yaml] Add flag to dump NULL as ~
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | https://github.com/symfony/symfony-docs/pull/12071
This PR adds the ability to dump `null` as `~` by a new Flag `Yaml::DUMP_NULL_AS_TILDE`:
```diff
- foo: null
+ foo: ~
```
Todos:
- [x] Fix/add tests
Commits
-------
749c11d94c
[Yaml] Add flag to dump NULL as ~
This commit is contained in:
commit
7479543f9a
@ -1,6 +1,11 @@
|
||||
CHANGELOG
|
||||
=========
|
||||
|
||||
4.4.0
|
||||
-----
|
||||
|
||||
* Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag.
|
||||
|
||||
4.3.0
|
||||
-----
|
||||
|
||||
|
@ -33,6 +33,7 @@ class Inline
|
||||
private static $objectSupport = false;
|
||||
private static $objectForMap = false;
|
||||
private static $constantSupport = false;
|
||||
private static $nullAsTilde = false;
|
||||
|
||||
/**
|
||||
* @param int $flags
|
||||
@ -45,6 +46,7 @@ class Inline
|
||||
self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags);
|
||||
self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags);
|
||||
self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags);
|
||||
self::$nullAsTilde = (bool) (Yaml::DUMP_NULL_AS_TILDE & $flags);
|
||||
self::$parsedFilename = $parsedFilename;
|
||||
|
||||
if (null !== $parsedLineNumber) {
|
||||
@ -129,7 +131,7 @@ class Inline
|
||||
throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
|
||||
}
|
||||
|
||||
return 'null';
|
||||
return self::dumpNull($flags);
|
||||
case $value instanceof \DateTimeInterface:
|
||||
return $value->format('c');
|
||||
case \is_object($value):
|
||||
@ -155,11 +157,11 @@ class Inline
|
||||
throw new DumpException('Object support when dumping a YAML file has been disabled.');
|
||||
}
|
||||
|
||||
return 'null';
|
||||
return self::dumpNull($flags);
|
||||
case \is_array($value):
|
||||
return self::dumpArray($value, $flags);
|
||||
case null === $value:
|
||||
return 'null';
|
||||
return self::dumpNull($flags);
|
||||
case true === $value:
|
||||
return 'true';
|
||||
case false === $value:
|
||||
@ -256,6 +258,15 @@ class Inline
|
||||
return sprintf('{ %s }', implode(', ', $output));
|
||||
}
|
||||
|
||||
private static function dumpNull(int $flags): string
|
||||
{
|
||||
if (Yaml::DUMP_NULL_AS_TILDE & $flags) {
|
||||
return '~';
|
||||
}
|
||||
|
||||
return 'null';
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a YAML scalar.
|
||||
*
|
||||
|
@ -504,6 +504,11 @@ YAML;
|
||||
$this->expectExceptionMessage('The indentation must be greater than zero');
|
||||
new Dumper(-4);
|
||||
}
|
||||
|
||||
public function testDumpNullAsTilde()
|
||||
{
|
||||
$this->assertSame('{ foo: ~ }', $this->dumper->dump(['foo' => null], 0, 0, Yaml::DUMP_NULL_AS_TILDE));
|
||||
}
|
||||
}
|
||||
|
||||
class A
|
||||
|
@ -33,6 +33,7 @@ class Yaml
|
||||
const PARSE_CONSTANT = 256;
|
||||
const PARSE_CUSTOM_TAGS = 512;
|
||||
const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024;
|
||||
const DUMP_NULL_AS_TILDE = 2048;
|
||||
|
||||
/**
|
||||
* Parses a YAML file into a PHP value.
|
||||
|
Reference in New Issue
Block a user