deprecate starting plain scalars with % characters

This commit is contained in:
Christian Flothmann 2016-02-15 18:14:40 +01:00
parent ddf62075e8
commit e883a4c717
5 changed files with 31 additions and 0 deletions

View File

@ -33,6 +33,8 @@ Serializer
Yaml
----
* Deprecated usage of `%` at the beginning of an unquoted string.
* The `Dumper::setIndentation()` method is deprecated and will be removed in
Symfony 4.0. Pass the indentation level to the constructor instead.

View File

@ -30,6 +30,8 @@ Serializer
Yaml
----
* Starting an unquoted string with `%` leads to a `ParseException`.
* The `Dumper::setIndentation()` method was removed. Pass the indentation
level to the constructor instead.

View File

@ -4,6 +4,8 @@ CHANGELOG
3.1.0
-----
* Deprecated usage of `%` at the beginning of an unquoted string.
* Added support for customizing the YAML parser behavior through an optional bit field:
```php

View File

@ -289,6 +289,10 @@ class Inline
throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]));
}
if ($output && '%' === $output[0]) {
@trigger_error('Not quoting a scalar starting with the "%" indicator character is deprecated since Symfony 3.1 and will throw a ParseException in 4.0.', E_USER_DEPRECATED);
}
if ($evaluate) {
$output = self::evaluateScalar($output, $references);
}

View File

@ -252,6 +252,27 @@ class InlineTest extends \PHPUnit_Framework_TestCase
return array(array('|'), array('>'));
}
/**
* @group legacy
* throws \Symfony\Component\Yaml\Exception\ParseException in 4.0
*/
public function testParseUnquotedScalarStartingWithPercentCharacter()
{
$deprecations = array();
set_error_handler(function ($type, $msg) use (&$deprecations) {
if (E_USER_DEPRECATED === $type) {
$deprecations[] = $msg;
}
});
Inline::parse('{ foo: %foo }');
restore_error_handler();
$this->assertCount(1, $deprecations);
$this->assertContains('Not quoting a scalar starting with the "%" indicator character is deprecated since Symfony 3.1 and will throw a ParseException in 4.0.', $deprecations[0]);
}
public function getTestsForParse()
{
return array(