Skip to content

Commit c837dc6

Browse files
authored
Merge pull request #441 from emodric/base_node_visitor
Twig has a \Twig_BaseNodeVisitor that assists provides a BC layer for NodeVisitors. Using it simplifies supporting Twig v1 and v2.
2 parents 08b8db9 + c561482 commit c837dc6

19 files changed

+58
-721
lines changed

DependencyInjection/JMSTranslationExtension.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ public function load(array $configs, ContainerBuilder $container)
3333
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
3434
$loader->load('services.xml');
3535

36-
if (defined('Twig_Environment::MAJOR_VERSION') && \Twig_Environment::MAJOR_VERSION > 1) {
37-
$loader->load('twig2.xml');
38-
} else {
39-
$loader->load('twig1.xml');
40-
}
41-
4236
$container->setParameter('jms_translation.source_language', $config['source_language']);
4337
$container->setParameter('jms_translation.locales', $config['locales']);
4438

Resources/config/services.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
66

77
<parameters>
8+
<parameter key="jms_translation.twig_extension.class">JMS\TranslationBundle\Twig\TranslationExtension</parameter>
9+
810
<parameter key="jms_translation.extractor_manager.class">JMS\TranslationBundle\Translation\ExtractorManager</parameter>
911
<parameter key="jms_translation.extractor.file_extractor.class">JMS\TranslationBundle\Translation\Extractor\FileExtractor</parameter>
1012
<parameter key="jms_translation.extractor.file.default_php_extractor">JMS\TranslationBundle\Translation\Extractor\File\DefaultPhpFileExtractor</parameter>
1113
<parameter key="jms_translation.extractor.file.translation_container_extractor">JMS\TranslationBundle\Translation\Extractor\File\TranslationContainerExtractor</parameter>
14+
<parameter key="jms_translation.extractor.file.twig_extractor">JMS\TranslationBundle\Translation\Extractor\File\TwigFileExtractor</parameter>
1215
<parameter key="jms_translation.extractor.file.form_extractor.class">JMS\TranslationBundle\Translation\Extractor\File\FormExtractor</parameter>
1316
<parameter key="jms_translation.extractor.file.validation_extractor.class">JMS\TranslationBundle\Translation\Extractor\File\ValidationExtractor</parameter>
1417
<parameter key="jms_translation.extractor.file.authentication_message_extractor.class">JMS\TranslationBundle\Translation\Extractor\File\AuthenticationMessagesExtractor</parameter>

Resources/config/twig1.xml

Lines changed: 0 additions & 11 deletions
This file was deleted.

Resources/config/twig2.xml

Lines changed: 0 additions & 11 deletions
This file was deleted.

Tests/Translation/Extractor/File/TwigFileExtractorTest.php

Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,59 +26,19 @@
2626
use Symfony\Component\Routing\Generator\UrlGenerator;
2727
use Symfony\Bridge\Twig\Extension\RoutingExtension;
2828
use JMS\TranslationBundle\Twig\RemovingNodeVisitor;
29-
use JMS\TranslationBundle\Twig2\RemovingNodeVisitor as Twig2RemovingNodeVisitor;
3029
use JMS\TranslationBundle\Twig\DefaultApplyingNodeVisitor;
31-
use JMS\TranslationBundle\Twig2\DefaultApplyingNodeVisitor as Twig2DefaultApplyingNodeVisitor;
3230
use JMS\TranslationBundle\Exception\RuntimeException;
3331
use Symfony\Component\Translation\MessageSelector;
3432
use Symfony\Component\Translation\IdentityTranslator;
3533
use Symfony\Bridge\Twig\Extension\TranslationExtension as SymfonyTranslationExtension;
3634
use JMS\TranslationBundle\Model\Message;
3735
use JMS\TranslationBundle\Model\MessageCatalogue;
3836
use JMS\TranslationBundle\Twig\TranslationExtension;
39-
use JMS\TranslationBundle\Twig2\TranslationExtension as Twig2TranslationExtension;
4037
use JMS\TranslationBundle\Translation\Extractor\File\TwigFileExtractor;
41-
use JMS\TranslationBundle\Translation\Extractor\File\Twig2FileExtractor;
4238
use Symfony\Bridge\Twig\Extension\FormExtension;
4339

4440
class TwigFileExtractorTest extends \PHPUnit_Framework_TestCase
4541
{
46-
/** @var \Twig_Environment */
47-
protected $env;
48-
49-
/** @var \JMS\TranslationBundle\Translation\Extractor\File\TwigFileExtractor */
50-
protected $extractor;
51-
52-
public function setUp()
53-
{
54-
$this->env = new \Twig_Environment(new \Twig_Loader_Array(array()));
55-
$this->env->addExtension(new SymfonyTranslationExtension($translator = new IdentityTranslator(new MessageSelector())));
56-
57-
if (defined('Twig_Environment::MAJOR_VERSION') && \Twig_Environment::MAJOR_VERSION > 1) {
58-
$this->env->addExtension(new Twig2TranslationExtension($translator, true));
59-
} else {
60-
$this->env->addExtension(new TranslationExtension($translator, true));
61-
}
62-
63-
$this->env->addExtension(new RoutingExtension(new UrlGenerator(new RouteCollection(), new RequestContext())));
64-
$this->env->addExtension(new FormExtension(new TwigRenderer(new TwigRendererEngine())));
65-
66-
foreach ($this->env->getNodeVisitors() as $visitor) {
67-
if ($visitor instanceof DefaultApplyingNodeVisitor || $visitor instanceof Twig2DefaultApplyingNodeVisitor) {
68-
$visitor->setEnabled(false);
69-
}
70-
if ($visitor instanceof RemovingNodeVisitor || $visitor instanceof Twig2RemovingNodeVisitor) {
71-
$visitor->setEnabled(false);
72-
}
73-
}
74-
75-
if (defined('Twig_Environment::MAJOR_VERSION') && \Twig_Environment::MAJOR_VERSION > 1) {
76-
$this->extractor = new Twig2FileExtractor($this->env, new FileSourceFactory('faux'));
77-
} else {
78-
$this->extractor = new TwigFileExtractor($this->env, new FileSourceFactory('faux'));
79-
}
80-
}
81-
8242
public function testExtractSimpleTemplate()
8343
{
8444
$expected = new MessageCatalogue();
@@ -183,11 +143,26 @@ private function extract($file, TwigFileExtractor $extractor = null)
183143
throw new RuntimeException(sprintf('The file "%s" does not exist.', $file));
184144
}
185145

146+
$env = new \Twig_Environment(new \Twig_Loader_Array(array()));
147+
$env->addExtension(new SymfonyTranslationExtension($translator = new IdentityTranslator(new MessageSelector())));
148+
$env->addExtension(new TranslationExtension($translator, true));
149+
$env->addExtension(new RoutingExtension(new UrlGenerator(new RouteCollection(), new RequestContext())));
150+
$env->addExtension(new FormExtension(new TwigRenderer(new TwigRendererEngine())));
151+
152+
foreach ($env->getNodeVisitors() as $visitor) {
153+
if ($visitor instanceof DefaultApplyingNodeVisitor) {
154+
$visitor->setEnabled(false);
155+
}
156+
if ($visitor instanceof RemovingNodeVisitor) {
157+
$visitor->setEnabled(false);
158+
}
159+
}
160+
186161
if (null === $extractor) {
187-
$extractor = $this->extractor;
162+
$extractor = new TwigFileExtractor($env, new FileSourceFactory('faux'));
188163
}
189164

190-
$ast = $this->env->parse($this->env->tokenize(new \Twig_Source(file_get_contents($file), $file)));
165+
$ast = $env->parse($env->tokenize(new \Twig_Source(file_get_contents($file), $file)));
191166

192167
$catalogue = new MessageCatalogue();
193168
$extractor->visitTwigFile(new \SplFileInfo($file), $catalogue, $ast);

Tests/Translation/Extractor/FileExtractorTest.php

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818

1919
namespace JMS\TranslationBundle\Tests\Translation\Extractor;
2020

21+
use JMS\TranslationBundle\Translation\Extractor\File\TwigFileExtractor;
2122
use JMS\TranslationBundle\Translation\FileSourceFactory;
23+
use JMS\TranslationBundle\Twig\TranslationExtension;
2224
use Psr\Log\NullLogger;
2325
use Doctrine\Common\Annotations\DocParser;
2426
use JMS\TranslationBundle\Translation\Extractor\File\FormExtractor;
@@ -38,20 +40,6 @@
3840

3941
class FileExtractorTest extends \PHPUnit_Framework_TestCase
4042
{
41-
protected $twigExtractorClass;
42-
protected $translationExtensionClass;
43-
44-
public function setUp()
45-
{
46-
$this->twigExtractorClass = 'JMS\TranslationBundle\Translation\Extractor\File\TwigFileExtractor';
47-
$this->translationExtensionClass = 'JMS\TranslationBundle\Twig\TranslationExtension';
48-
49-
if (defined('Twig_Environment::MAJOR_VERSION') && \Twig_Environment::MAJOR_VERSION > 1) {
50-
$this->twigExtractorClass = 'JMS\TranslationBundle\Translation\Extractor\File\Twig2FileExtractor';
51-
$this->translationExtensionClass = 'JMS\TranslationBundle\Twig2\TranslationExtension';
52-
}
53-
}
54-
5543
public function testExtractWithSimpleTestFixtures()
5644
{
5745
$expected = array();
@@ -109,7 +97,7 @@ private function extract($directory)
10997
{
11098
$twig = new \Twig_Environment(new \Twig_Loader_Array(array()));
11199
$twig->addExtension(new SymfonyTranslationExtension($translator = new IdentityTranslator(new MessageSelector())));
112-
$twig->addExtension(new $this->translationExtensionClass($translator));
100+
$twig->addExtension(new TranslationExtension($translator));
113101
$loader=new \Twig_Loader_Filesystem(realpath(__DIR__."/Fixture/SimpleTest/Resources/views/"));
114102
$twig->setLoader($loader);
115103

@@ -135,7 +123,7 @@ private function extract($directory)
135123
$extractor = new FileExtractor($twig, new NullLogger(), array(
136124
new DefaultPhpFileExtractor($docParser, $dummyFileSourceFactory),
137125
new TranslationContainerExtractor(),
138-
new $this->twigExtractorClass($twig, $dummyFileSourceFactory),
126+
new TwigFileExtractor($twig, $dummyFileSourceFactory),
139127
new ValidationExtractor($factory),
140128
new FormExtractor($docParser, $dummyFileSourceFactory),
141129
));

Tests/Twig/BaseTwigTestCase.php

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,17 @@
2121
use Symfony\Component\Translation\MessageSelector;
2222
use Symfony\Component\Translation\IdentityTranslator;
2323
use Symfony\Bridge\Twig\Extension\TranslationExtension as SymfonyTranslationExtension;
24+
use JMS\TranslationBundle\Twig\TranslationExtension;
2425

2526
abstract class BaseTwigTestCase extends \PHPUnit_Framework_TestCase
2627
{
27-
protected $extensionClass;
28-
29-
public function setUp()
30-
{
31-
$this->extensionClass = 'JMS\TranslationBundle\Twig\TranslationExtension';
32-
if (defined('Twig_Environment::MAJOR_VERSION') && \Twig_Environment::MAJOR_VERSION > 1) {
33-
$this->extensionClass = 'JMS\TranslationBundle\Twig2\TranslationExtension';
34-
}
35-
}
36-
3728
final protected function parse($file, $debug = false)
3829
{
3930
$content = file_get_contents(__DIR__.'/Fixture/'.$file);
4031

4132
$env = new \Twig_Environment(new \Twig_Loader_Array(array()));
4233
$env->addExtension(new SymfonyTranslationExtension($translator = new IdentityTranslator(new MessageSelector())));
43-
$env->addExtension(new $this->extensionClass($translator, $debug));
34+
$env->addExtension(new TranslationExtension($translator, $debug));
4435

4536
return $env->parse($env->tokenize(new \Twig_Source($content, null)))->getNode('body');
4637
}

0 commit comments

Comments
 (0)