feature #17809 [Yaml] deprecate starting plain scalars with % characters (xabbuh)

This PR was merged into the 3.1-dev branch.

Discussion
----------

[Yaml] deprecate starting plain scalars with % characters

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets | symfony/symfony-docs#6269, symfony/symfony-standard#426
| License       | MIT
| Doc PR        |

Commits
-------

e883a4c deprecate starting plain scalars with % characters
This commit is contained in:
Fabien Potencier 2016-02-18 10:58:30 +01:00
commit 3e9c268f02
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(