Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added Twig_Util_DeprecationCollector to collect deprecation notices f…
…or a set of templates
- Loading branch information
Showing
3 changed files
with
141 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* @author Fabien Potencier <fabien@symfony.com> | ||
*/ | ||
class Twig_Util_DeprecationCollector | ||
{ | ||
private $twig; | ||
private $deprecations; | ||
|
||
public function __construct(Twig_Environment $twig) | ||
{ | ||
$this->twig = $twig; | ||
} | ||
|
||
/** | ||
* Returns deprecations for templates contained in a directory. | ||
* | ||
* @param string $dir A directory where templates are stored | ||
* @param string $ext Limit the loaded templates by extension | ||
* | ||
* @return array() An array of deprecations | ||
*/ | ||
public function collectDir($dir, $ext = '.twig') | ||
{ | ||
$iterator = new RegexIterator( | ||
new RecursiveIteratorIterator( | ||
new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY | ||
), '{'.preg_quote($ext).'$}' | ||
); | ||
|
||
return $this->collect(new Twig_Util_TemplateDirIterator($iterator)); | ||
} | ||
|
||
/** | ||
* Returns deprecations for passed templates. | ||
* | ||
* @param Iterator $iterator An iterator of templates (where keys are template names and values the contents of the template) | ||
* | ||
* @return array() An array of deprecations | ||
*/ | ||
public function collect(Iterator $iterator) | ||
{ | ||
$this->deprecations = array(); | ||
|
||
set_error_handler(array($this, 'errorHandler')); | ||
|
||
foreach ($iterator as $name => $contents) { | ||
try { | ||
$this->twig->parse($this->twig->tokenize($contents, $name)); | ||
} catch (Twig_Error_Syntax $e) { | ||
// ignore templates containing syntax errors | ||
} | ||
} | ||
|
||
restore_error_handler(); | ||
|
||
$deprecations = $this->deprecations; | ||
$this->deprecations = array(); | ||
|
||
return $deprecations; | ||
} | ||
|
||
/** | ||
* @internal | ||
*/ | ||
public function errorHandler($type, $msg) | ||
{ | ||
if (E_USER_DEPRECATED === $type) { | ||
$this->deprecations[] = $msg; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* @author Fabien Potencier <fabien@symfony.com> | ||
*/ | ||
class Twig_Util_TemplateDirIterator extends IteratorIterator | ||
{ | ||
public function current() | ||
{ | ||
return file_get_contents(parent::current()); | ||
} | ||
|
||
public function key() | ||
{ | ||
return (string) parent::key(); | ||
} | ||
} |