added a way to trigger deprecation notices for filters and functions

This commit is contained in:
Fabien Potencier
2015-08-16 00:04:47 +02:00
parent 21f536bc0a
commit d16b7bf0a7
3 changed files with 44 additions and 0 deletions
+20
View File
@@ -578,6 +578,16 @@ class Twig_ExpressionParser
throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename()); throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename());
} }
if ($function instanceof Twig_SimpleFunction && $function->isDeprecated()) {
$message = sprintf('Twig Function "%s" is deprecated', $function->getName());
if ($test->getAlternative()) {
$message .= sprintf('. Use "%s" instead', $function->getAlternative());
}
$message .= sprintf(' in %s at line %d.', $this->parser->getFilename(), $line);
@trigger_error($message, E_USER_DEPRECATED);
}
if ($function instanceof Twig_SimpleFunction) { if ($function instanceof Twig_SimpleFunction) {
return $function->getNodeClass(); return $function->getNodeClass();
} }
@@ -598,6 +608,16 @@ class Twig_ExpressionParser
throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename()); throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename());
} }
if ($filter instanceof Twig_SimpleFilter && $filter->isDeprecated()) {
$message = sprintf('Twig Filter "%s" is deprecated', $filter->getName());
if ($test->getAlternative()) {
$message .= sprintf('. Use "%s" instead', $filter->getAlternative());
}
$message .= sprintf(' in %s at line %d.', $this->parser->getFilename(), $line);
@trigger_error($message, E_USER_DEPRECATED);
}
if ($filter instanceof Twig_SimpleFilter) { if ($filter instanceof Twig_SimpleFilter) {
return $filter->getNodeClass(); return $filter->getNodeClass();
} }
+12
View File
@@ -34,6 +34,8 @@ class Twig_SimpleFilter
'pre_escape' => null, 'pre_escape' => null,
'preserves_safety' => null, 'preserves_safety' => null,
'node_class' => 'Twig_Node_Expression_Filter', 'node_class' => 'Twig_Node_Expression_Filter',
'deprecated' => false,
'alternative' => null,
), $options); ), $options);
} }
@@ -97,4 +99,14 @@ class Twig_SimpleFilter
{ {
return $this->options['is_variadic']; return $this->options['is_variadic'];
} }
public function isDeprecated()
{
return $this->options['deprecated'];
}
public function getAlternative()
{
return $this->options['alternative'];
}
} }
+12
View File
@@ -32,6 +32,8 @@ class Twig_SimpleFunction
'is_safe' => null, 'is_safe' => null,
'is_safe_callback' => null, 'is_safe_callback' => null,
'node_class' => 'Twig_Node_Expression_Function', 'node_class' => 'Twig_Node_Expression_Function',
'deprecated' => false,
'alternative' => null,
), $options); ), $options);
} }
@@ -87,4 +89,14 @@ class Twig_SimpleFunction
{ {
return $this->options['is_variadic']; return $this->options['is_variadic'];
} }
public function isDeprecated()
{
return $this->options['deprecated'];
}
public function getAlternative()
{
return $this->options['alternative'];
}
} }