Help the developer when they specify an invalid function by providing some alternatives
authorJonathan Ingram <jonathan.b.ingram@gmail.com>
Mon, 5 Dec 2011 00:47:40 +0000 (11:47 +1100)
committerFabien Potencier <fabien.potencier@gmail.com>
Wed, 7 Dec 2011 07:58:57 +0000 (08:58 +0100)
lib/Twig/Node/Expression/Function.php

index 3f45719..b1fa858 100644 (file)
@@ -17,9 +17,26 @@ class Twig_Node_Expression_Function extends Twig_Node_Expression
 
     public function compile(Twig_Compiler $compiler)
     {
-        $function = $compiler->getEnvironment()->getFunction($this->getAttribute('name'));
+        $name = $this->getAttribute('name');
+        
+        $function = $compiler->getEnvironment()->getFunction($name);
+        
         if (false === $function) {
-            throw new Twig_Error_Syntax(sprintf('The function "%s" does not exist', $this->getAttribute('name')), $this->getLine());
+            $alternativeFunctions = array();
+            
+            foreach ($compiler->getEnvironment()->getFunctions() as $functionName => $function) {
+                if (false !== strpos($functionName, $name)) {
+                    $alternativeFunctions[] = $functionName;
+                }
+            }
+            
+            $exceptionMessage = sprintf('The function "%s" does not exist', $name);
+           
+            if (count($alternativeFunctions)) {
+                $exceptionMessage = sprintf('%s. Did you mean "%s"?', $exceptionMessage, implode('", "', $alternativeFunctions));
+            }
+            
+            throw new Twig_Error_Syntax($exceptionMessage, $this->getLine());
         }
 
         $compiler