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('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('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('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('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('constant', null, array('node_class' => 'Twig_Node_Expression_Test_Constant')),
|
||||
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)
|
||||
{
|
||||
$stream = $parser->getStream();
|
||||
$name = $this->getTestName($parser, $node->getLine());
|
||||
$class = $this->getTestNodeClass($parser, $name);
|
||||
$test = $this->getTest($parser, $node->getLine());
|
||||
|
||||
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;
|
||||
if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
|
||||
$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();
|
||||
$name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
|
||||
@@ -316,7 +327,7 @@ class Twig_Extension_Core extends Twig_Extension
|
||||
$testMap = $env->getTests();
|
||||
|
||||
if (isset($testMap[$name])) {
|
||||
return $name;
|
||||
return $testMap[$name];
|
||||
}
|
||||
|
||||
if ($stream->test(Twig_Token::NAME_TYPE)) {
|
||||
@@ -326,7 +337,7 @@ class Twig_Extension_Core extends Twig_Extension
|
||||
if (isset($testMap[$name])) {
|
||||
$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());
|
||||
}
|
||||
|
||||
protected function getTestNodeClass(Twig_Parser $parser, $name)
|
||||
protected function getTestNodeClass(Twig_Parser $parser, $test)
|
||||
{
|
||||
$env = $parser->getEnvironment();
|
||||
$testMap = $env->getTests();
|
||||
|
||||
if ($testMap[$name] instanceof Twig_SimpleTest) {
|
||||
return $testMap[$name]->getNodeClass();
|
||||
if ($test instanceof Twig_SimpleTest) {
|
||||
return $test->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(
|
||||
'is_variadic' => false,
|
||||
'node_class' => 'Twig_Node_Expression_Test',
|
||||
'deprecated' => false,
|
||||
'alternative' => null,
|
||||
), $options);
|
||||
}
|
||||
|
||||
@@ -49,4 +51,14 @@ class Twig_SimpleTest
|
||||
{
|
||||
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