Permalink
Browse files

merged branch jonathaningram/patch-1 (PR #549)

Commits
-------

989bb22 Removed trailing white spaces
f880bab Help the developer when they specify an invalid filter by providing some alternatives

Discussion
----------

Help the developer when they specify an invalid filter by providing some...

... alternatives.

Bug fix: no
Feature addition: yes
Backwards compatibility break: no

Uses a simple `strpos` search (no fancy diff to determine what the filter could be). There is no impact to runtime performance because this is all happening during template compilation.

Examples:

```jinja
{{ my_entity|json }}
```

Shows exception:

`The filter "json" does not exist. Did you mean "json_encode"?`

```jinja
{{ my_date|dat }}
```

Shows:

`The filter "dat" does not exist. Did you mean "date"?`

```jinja
{{ my_var|f }}
```

Shows:

`The filter "f" does not exist. Did you mean "format", "default", "_default", "format_args", "format_args_as_text", "file_excerpt", "format_file", "format_file_from_text", "file_link"?`

Also good for custom filters created in your own domain `st_`:

```jinja
{{ my_var|st_ }}
```

Shows:

`The filter "st_" does not exist. Did you mean "st_friendly_date", "st_site_test_url"?`

---------------------------------------------------------------------------

by stof at 2011/12/04 16:34:27 -0800

I like the idea to provide help to the developer in case of error. You should probably do the same for functions

---------------------------------------------------------------------------

by Tobion at 2011/12/05 05:56:29 -0800

+1 for a combination of string starts with (suggesting domain specific filters, e.g. st_*) and levenshtein for typos

---------------------------------------------------------------------------

by chucktrukk at 2011/12/05 08:13:10 -0800

+1. This would be really helpful.
  • Loading branch information...
2 parents 460ba4d + 989bb22 commit 55c7ff00b16c73db28b1c15015104b43fcbc328f @fabpot committed Dec 7, 2011
Showing with 16 additions and 1 deletion.
  1. +16 −1 lib/Twig/Node/Expression/Filter.php
@@ -19,8 +19,23 @@ public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Const
public function compile(Twig_Compiler $compiler)
{
$name = $this->getNode('filter')->getAttribute('value');
+
if (false === $filter = $compiler->getEnvironment()->getFilter($name)) {
- throw new Twig_Error_Syntax(sprintf('The filter "%s" does not exist', $name), $this->getLine());
+ $alternativeFilters = array();
+
+ foreach ($compiler->getEnvironment()->getFilters() as $filterName => $filter) {
+ if (false !== strpos($filterName, $name)) {
+ $alternativeFilters[] = $filterName;
+ }
+ }
+
+ $exceptionMessage = sprintf('The filter "%s" does not exist', $name);
+
+ if (count($alternativeFilters)) {
+ $exceptionMessage = sprintf('%s. Did you mean "%s"?', $exceptionMessage, implode('", "', $alternativeFilters));
+ }
+
+ throw new Twig_Error_Syntax($exceptionMessage, $this->getLine());
}
$this->compileFilter($compiler, $filter);

0 comments on commit 55c7ff0

Please sign in to comment.