mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-14 11:27:00 +00:00
added deprecation notices for deprecated tests
This commit is contained in:
+23
-15
@@ -233,11 +233,11 @@ class Twig_Extension_Core extends Twig_Extension
|
|||||||
new Twig_SimpleTest('even', null, array('node_class' => 'Twig_Node_Expression_Test_Even')),
|
new Twig_SimpleTest('even', null, array('node_class' => 'Twig_Node_Expression_Test_Even')),
|
||||||
new Twig_SimpleTest('odd', null, array('node_class' => 'Twig_Node_Expression_Test_Odd')),
|
new Twig_SimpleTest('odd', null, array('node_class' => 'Twig_Node_Expression_Test_Odd')),
|
||||||
new Twig_SimpleTest('defined', null, array('node_class' => 'Twig_Node_Expression_Test_Defined')),
|
new Twig_SimpleTest('defined', null, array('node_class' => 'Twig_Node_Expression_Test_Defined')),
|
||||||
new Twig_SimpleTest('sameas', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas')),
|
new Twig_SimpleTest('sameas', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas', 'deprecated' => true, 'alternative' => 'same as')),
|
||||||
new Twig_SimpleTest('same as', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas')),
|
new Twig_SimpleTest('same as', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas')),
|
||||||
new Twig_SimpleTest('none', null, array('node_class' => 'Twig_Node_Expression_Test_Null')),
|
new Twig_SimpleTest('none', null, array('node_class' => 'Twig_Node_Expression_Test_Null')),
|
||||||
new Twig_SimpleTest('null', null, array('node_class' => 'Twig_Node_Expression_Test_Null')),
|
new Twig_SimpleTest('null', null, array('node_class' => 'Twig_Node_Expression_Test_Null')),
|
||||||
new Twig_SimpleTest('divisibleby', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby')),
|
new Twig_SimpleTest('divisibleby', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby', 'deprecated' => true, 'alternative' => 'divisible by')),
|
||||||
new Twig_SimpleTest('divisible by', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby')),
|
new Twig_SimpleTest('divisible by', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby')),
|
||||||
new Twig_SimpleTest('constant', null, array('node_class' => 'Twig_Node_Expression_Test_Constant')),
|
new Twig_SimpleTest('constant', null, array('node_class' => 'Twig_Node_Expression_Test_Constant')),
|
||||||
new Twig_SimpleTest('empty', 'twig_test_empty'),
|
new Twig_SimpleTest('empty', 'twig_test_empty'),
|
||||||
@@ -298,17 +298,28 @@ class Twig_Extension_Core extends Twig_Extension
|
|||||||
public function parseTestExpression(Twig_Parser $parser, Twig_NodeInterface $node)
|
public function parseTestExpression(Twig_Parser $parser, Twig_NodeInterface $node)
|
||||||
{
|
{
|
||||||
$stream = $parser->getStream();
|
$stream = $parser->getStream();
|
||||||
$name = $this->getTestName($parser, $node->getLine());
|
$test = $this->getTest($parser, $node->getLine());
|
||||||
$class = $this->getTestNodeClass($parser, $name);
|
|
||||||
|
if ($test instanceof Twig_SimpleTest && $test->isDeprecated()) {
|
||||||
|
$message = sprintf('Twig Test "%s" is deprecated', $test->getName());
|
||||||
|
if ($test->getAlternative()) {
|
||||||
|
$message .= sprintf('. Use "%s" instead', $test->getAlternative());
|
||||||
|
}
|
||||||
|
$message .= sprintf(' in %s at line %d.', $stream->getFilename(), $stream->getCurrent()->getLine());
|
||||||
|
|
||||||
|
@trigger_error($message, E_USER_DEPRECATED);
|
||||||
|
}
|
||||||
|
|
||||||
|
$class = $this->getTestNodeClass($parser, $test);
|
||||||
$arguments = null;
|
$arguments = null;
|
||||||
if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
|
if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
|
||||||
$arguments = $parser->getExpressionParser()->parseArguments(true);
|
$arguments = $parser->getExpressionParser()->parseArguments(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new $class($node, $name, $arguments, $parser->getCurrentToken()->getLine());
|
return new $class($node, $test->getName(), $arguments, $parser->getCurrentToken()->getLine());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getTestName(Twig_Parser $parser, $line)
|
protected function getTest(Twig_Parser $parser, $line)
|
||||||
{
|
{
|
||||||
$stream = $parser->getStream();
|
$stream = $parser->getStream();
|
||||||
$name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
|
$name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
|
||||||
@@ -316,7 +327,7 @@ class Twig_Extension_Core extends Twig_Extension
|
|||||||
$testMap = $env->getTests();
|
$testMap = $env->getTests();
|
||||||
|
|
||||||
if (isset($testMap[$name])) {
|
if (isset($testMap[$name])) {
|
||||||
return $name;
|
return $testMap[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($stream->test(Twig_Token::NAME_TYPE)) {
|
if ($stream->test(Twig_Token::NAME_TYPE)) {
|
||||||
@@ -326,7 +337,7 @@ class Twig_Extension_Core extends Twig_Extension
|
|||||||
if (isset($testMap[$name])) {
|
if (isset($testMap[$name])) {
|
||||||
$parser->getStream()->next();
|
$parser->getStream()->next();
|
||||||
|
|
||||||
return $name;
|
return $testMap[$name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,16 +349,13 @@ class Twig_Extension_Core extends Twig_Extension
|
|||||||
throw new Twig_Error_Syntax($message, $line, $parser->getFilename());
|
throw new Twig_Error_Syntax($message, $line, $parser->getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getTestNodeClass(Twig_Parser $parser, $name)
|
protected function getTestNodeClass(Twig_Parser $parser, $test)
|
||||||
{
|
{
|
||||||
$env = $parser->getEnvironment();
|
if ($test instanceof Twig_SimpleTest) {
|
||||||
$testMap = $env->getTests();
|
return $test->getNodeClass();
|
||||||
|
|
||||||
if ($testMap[$name] instanceof Twig_SimpleTest) {
|
|
||||||
return $testMap[$name]->getNodeClass();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $testMap[$name] instanceof Twig_Test_Node ? $testMap[$name]->getClass() : 'Twig_Node_Expression_Test';
|
return $test instanceof Twig_Test_Node ? $test->getClass() : 'Twig_Node_Expression_Test';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ class Twig_SimpleTest
|
|||||||
$this->options = array_merge(array(
|
$this->options = array_merge(array(
|
||||||
'is_variadic' => false,
|
'is_variadic' => false,
|
||||||
'node_class' => 'Twig_Node_Expression_Test',
|
'node_class' => 'Twig_Node_Expression_Test',
|
||||||
|
'deprecated' => false,
|
||||||
|
'alternative' => null,
|
||||||
), $options);
|
), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,4 +51,14 @@ class Twig_SimpleTest
|
|||||||
{
|
{
|
||||||
return $this->options['is_variadic'];
|
return $this->options['is_variadic'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isDeprecated()
|
||||||
|
{
|
||||||
|
return $this->options['deprecated'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAlternative()
|
||||||
|
{
|
||||||
|
return $this->options['alternative'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user